4.6 Smart HTTP

2018-02-24 15:22 更新

Smart HTTP

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

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

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

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

接下來我們要向 Apache 配置文件添加一些內容,來讓 git-http-backend 作為 Web 服務器對 /git 路徑請求的處理器。

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

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

接著你需要讓 Apache 接受通過該路徑的請求,添加如下的內容至 Apache 配置文件:

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

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

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

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

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

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

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

欲了解更多的有關配置 Apache 授權訪問的信息,請通過以下鏈接瀏覽 Apache 文檔:

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號