4.6 Smart HTTP

2018-02-24 15:22 更新

Smart HTTP

我們一般通過(guò) SSH 進(jìn)行授權(quán)訪問(wèn),通過(guò) git:// 進(jìn)行無(wú)授權(quán)訪問(wèn),但是還有一種協(xié)議可以同時(shí)實(shí)現(xiàn)以上兩種方式的訪問(wèn)。設(shè)置 Smart HTTP 一般只需要在服務(wù)器上啟用一個(gè) Git 自帶的名為 git-http-backend 的 CGI 腳本。該 CGI 腳本將會(huì)讀取由 git fetchgit push 命令向 HTTP URL 發(fā)送的請(qǐng)求路徑和頭部信息,來(lái)判斷該客戶端是否支持 HTTP 通信(不低于 1.6.6 版本的客戶端支持此特性)。如果 CGI 發(fā)現(xiàn)該客戶端支持智能(Smart)模式,它將會(huì)以智能模式與它進(jìn)行通信,否則它將會(huì)回落到?。―umb)模式下(因此它可以對(duì)某些老的客戶端實(shí)現(xiàn)向下兼容)。

在完成以上簡(jiǎn)單的安裝步驟后,我們將用 Apache 來(lái)作為 CGI 服務(wù)器。如果你沒(méi)有安裝 Apache,你可以在 Linux 環(huán)境下執(zhí)行如下或類似的命令來(lái)安裝:

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

該操作將會(huì)啟用 mod_cgi, mod_alias, 和 mod_env 等 Apache 模塊, 這些模塊都是使該功能正常工作所必須的。

接下來(lái)我們要向 Apache 配置文件添加一些內(nèi)容,來(lái)讓 git-http-backend 作為 Web 服務(wù)器對(duì) /git 路徑請(qǐng)求的處理器。

SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

如果留空 GIT_HTTP_EXPORT_ALL 這個(gè)環(huán)境變量,Git 將只對(duì)無(wú)授權(quán)客戶端提供帶 git-daemon-export-ok 文件的版本庫(kù),就像 Git 守護(hù)進(jìn)程一樣。

接著你需要讓 Apache 接受通過(guò)該路徑的請(qǐng)求,添加如下的內(nèi)容至 Apache 配置文件:

<Directory "/usr/lib/git-core*">
   Options ExecCGI Indexes
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

最后,如果想實(shí)現(xiàn)寫(xiě)操作授權(quán)驗(yàn)證,使用如下的未授權(quán)屏蔽配置即可:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /opt/git/.htpasswd
    Require valid-user
</LocationMatch>

這需要你創(chuàng)建一個(gè)包含所有合法用戶密碼的 .htaccess 文件。以下是一個(gè)添加 “schacon” 用戶到此文件的例子:

$ htdigest -c /opt/git/.htpasswd "Git Access" schacon

你可以通過(guò)許多方式添加 Apache 授權(quán)用戶,選擇使用其中一種方式即可。以上僅僅只是我們可以找到的最簡(jiǎn)單的一個(gè)例子。如果愿意的話,你也可以通過(guò) SSL 運(yùn)行它,以保證所有數(shù)據(jù)是在加密狀態(tài)下進(jìn)行傳輸?shù)摹?/p>

我們不想深入去講解 Apache 配置文件,因?yàn)槟憧赡軙?huì)使用不同的 Web 服務(wù)器,或者可能有不同的授權(quán)需求。它的主要原理是使用一個(gè) Git 附帶的,名為 git-http-backend 的 CGI。它被引用來(lái)處理協(xié)商通過(guò) HTTP 發(fā)送和接收的數(shù)據(jù)。它本身并不包含任何授權(quán)功能,但是授權(quán)功能可以在 Web 服務(wù)器層引用它時(shí)被輕松實(shí)現(xiàn)。你可以在任何所有可以處理 CGI 的 Web 服務(wù)器上辦到這點(diǎn),所以隨便挑一個(gè)你最熟悉的 Web 服務(wù)器試手吧。

欲了解更多的有關(guān)配置 Apache 授權(quán)訪問(wèn)的信息,請(qǐng)通過(guò)以下鏈接瀏覽 Apache 文檔:

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)