apache配置
註意:目前windows下的subversion只能跟Apache2.0.x配合,不能用於Apache2.2.x,除非你自己編譯
在所有的Subversion服務器配置方式中,基於Apache的是最靈活的。雖然配置起來有一點點復雜,但是它提供了其它方式所沒有的好處:
WebDAV
基於Apache配置的Subversion服務器使用了被許多其它程序支持的WebDAV協議。舉個例子,你可以在Windows的資源管理器中將這樣的一個版本
庫掛載成一個“Webfolder”,然後像文件系統中的其它文件夾一樣訪問它。
瀏覽版本庫
你可以在不安裝Subversion客戶端的情況下,使用瀏覽器來瀏覽版本庫中的內容。這將使得更大範圍的用戶可以訪問你的數據。
用戶驗證
你可以使用任何Apache支持的驗證機制,包括SSPI和LDAP。
安全
Apache是非常的穩定和安全,因此你的版本庫自然而然地擁有同樣的安全性。包括SSL加密。
2. 安裝過程
2.1. 安裝Apache
安裝Apache前,你要有一臺運行Windows2000、Windows XP + sp1或Windows2003的電腦。
警告:請註意,沒安裝Service Pack 1的Windows XP將導致錯誤的網絡數據從而破壞你的版本庫!
從http://httpd.apache.org/download.cgi 下載最新版本的Apache Web服務器。確保你下載的版本大於2.0.54。2.0.54版本的Apache將不能與
Subversion 1.3.xx配合工作。而且,小於2.0.54的Apache也因為在windows上的編譯存在一個bug而導致不能與subversion1.2配合使用。
一旦你已經有了Apache2的安裝程序,你可以雙擊它,它將引導你完成整個安裝過程。請確保你輸入正確的服務器URL(如果你的服務器沒有DNS
名稱,你可以直接輸入IP地址)。我建議你將Apache安裝成 for all Users,on Port 80,as a service。註意:如果你已經有一個IIS或者其它
的程序使用80端口,安裝可能會失敗。如果是這樣,你可以到程序目錄下的Apache Group\Apache2\conf目錄中找到文件httpd.conf,將其中的
Listen 80改成一個不用的端口,比如Listen 81。然後重新運行這個安裝程序,這次應該不會再有問題了。
現在你可以在你的瀏覽器中鍵入 http://loccalhost/,如果呈現了一個已經配置好的網站,那麽你的Apache就安裝成功了。
警告:
如果你將Apache安裝成一個服務,它將以本地system帳戶來運行。為Apache創建一個單獨的用戶來運行它將會更安全一些。
請確保運行Apache的用戶有版本庫的完全訪問權限(右鍵版本庫目錄->屬性->安全)。要不然,用戶將無法提交他們的更改。
就算Apache以本機system來運行,你也要設置它能完全讀寫版本庫目錄。
如果沒有為Apache配置這個許可,用戶將會得到"禁止訪問"的錯誤信息,在Apache的錯誤日誌中表現為錯誤500。
2.2. 安裝Subversion
從http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 (英文)
或
http://www.iusesvn.com/bbs/forumdisplay.php?fid=7(中文)下載最新版本的Subversion。
運行Subversion安裝程序,如果安裝程序能夠識別你已經安裝了Apache,那麽你的安裝基本上就OK了。如果它不能,那麽你要做一些額外的步
驟。
註:如果你先安裝Apache,再安裝Subversion,正常情況下下面的工作(2.3配置前)Subversion安裝程序已經幫你完成了
使用資源管理器,進入Sibversion的安裝目錄(通常為c:\program files\Subversion),找到文件httpd/mod_dav_svn.so和mod_authz_svn.so
,將它們拷貝到Apache的modules目錄(通常為c:\program files\apache group\apache2\modules)。
從Subversion的安裝目錄拷貝文件libdb43.dll到Apache的modules目錄。
使用如記事本之類的文本編輯器編輯Apache的配置文件(通常為c:\program files\apache group\apache2\conf\httd.conf),修改以下內容:
去掉以下行的註釋(將開頭的#刪除):
CODE:
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
在LoadModule節的最後添加以下兩行:
CODE:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2.3. 配置
現在,你已經安裝了Apache和Subversion,但是Apache還不知道如果處理像TortoiseSVN一樣的Subversion客戶端。要讓Apache知道哪個URL將
被Subversion使用,你要像下面這樣編輯Apache的配置文件(通常在c:\program files\apache group\apache2\conf\httpd.conf):
在配置文件的最後添加下面這些行:
CODE:
<Location /svn>
DAV svn
SVNParentPath D:\SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>
這樣配置表示:你所有的版本庫將位於D:\SVN目錄下,要訪問你的版本庫可以使用這樣的URL:http://MyServer/svn/,訪問權限將由passwd文
件中的用戶名/密碼來限制。
要創建passwd文件,可以打開命令行(DOS窗口),將當前目錄切換到apache2目錄(通常為c:\program files\apache group\apache2),然後打
入以下命令以創建文件:
CODE:
bin\htpasswd -c passwd <username>
重啟Apache服務。
將你的瀏覽器指向http://MyServer/svn/MyNewRepository(MyNewRepository是你之前創建的Subversion版本庫)。如果一切正常,你將被提示
輸入用戶名密碼,輸入正確的用戶名密碼後你就可以看到版本庫中的內容了。
對你剛剛輸入的apache配置作一些簡短的說明:
QUOTE:
<Location /svn>
意味著可以通過像這樣的URL(http://MyServer/svn)來訪問Subversion版本庫
DAV svn
告訴Apache哪個模塊負責服務像那樣的URL--在這裏就是Subversion模塊
SVNListParentPath on
在Subversion 1.3及更高版本中,這個指示器使得Subversion列出由SVNParentPath指定的目錄下所有的版本庫
SVNParentPath D:\SVN
告訴Subversion在目錄D:\SVN下尋找版本庫
AuthType Basic
啟用基本的驗證,比如用戶名/密碼對
AuthName "Subversion repositories"
當一個驗證對話框彈出時,告訴用戶這個驗證是用來做什麽的
AuthUserFile D:\passwd
指定D:\passwd用為密碼文件用來驗證用戶的用戶名及密碼
AuthzSVNAccessFile D:\svnaccessfile
指定D:\svnaccessfile來限定各個用戶或組在版本庫中目錄的訪問權限
Require valid-user
限定用戶只有輸入正確的用戶名及密碼後才能訪問這個路徑
----------------------------------------
上面的配置僅僅是一個簡單的示例。你還可以對Apache進行許許多多的配置。
1如果你想讓所有用戶對版本庫都有讀的權限而只有特定的用戶才有寫的權限,你可以將這行
CODE:
Require valid-user
改為
CODE:
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
2上面的配置使用了passwd文件將你所有的版本庫作為一個單元來限定訪問權限。如果你想獲得更多的控制,如限定某個用戶可以訪問版本庫中
的哪個目錄,可以把下面這行的#去掉:
CODE:
#AuthzSVNAccessFile D:\svnaccessfile
然後用文本編輯器創建一個Subversion授權文件。Apache將確保只有有效的用戶可以訪問你的/svn位置,然後將用戶名傳到
AuthzSVNAccessFile模塊,這樣可以依據Subversion授權文件得到更精細的權限控制。註意,路徑將被指定為[庫:路徑]或者簡單的[路徑]。如
果你不明確指定一個庫,訪問規則將應用到由SVNParentPath指定的目錄下所有的版本庫中。一個授權文件例子可能像這樣:
CODE:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# 為所有庫指定默認訪問規則
# 所有人可以讀,管理員可以寫,危險分子沒有任何權限
[/]
* = r
@admin = rw
dangerman =
# 允許開發人員可以完全訪問他們的項目版本庫
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文檔編寫人員對所有的docs目錄有寫權限
[/trunk/doc]
@docs = rw
# 培訓人員可以完全訪問培訓版本庫
[TrainingRepos:/]
@training = rw
2.4. 使用SSL來保護你的服務器
因為美國出口限制,默認安裝的Apache服務器不支持SSL。但是你自己可以很容易地在其它地方下載到所需要的模塊,然後安裝它。
首先你需要SSL的必需文件。你可以http://hunter.campbus.com/ 或這裏找到相應的軟件包(或者下載本主題的附件1:
附件: mod_ssl_etc.rar (2006-10-16 15:30, 595.45 K)
該附件被下載次數 110
)。然後只要將包解開將其中的mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、
conf/ssl.conf拷到conf目錄。
在Apache的conf目錄中用文本編輯器打開ssl.conf。
將下面這些行用#註釋掉:
CODE:
DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin [email protected]
ErrorLog logs/error_log
TransferLog logs/access_log
修改
CODE:
SSLCertificateFile conf/ssl.crt/server.crt
為
CODE:
SSLCertificateFile conf/ssl/my-server.cert
修改
CODE:
SSLCertificateKeyFile conf/ssl.key/server.key
為
CODE:
SSLCertificateKeyFile conf/ssl/my-server.key
修改
CODE:
SSLMutex file:logs/ssl_mutex
為
CODE:
SSLMutex default
刪除以下兩行(如果有,我認為有錯,刪掉之後apache無法啟動):
CODE:
<IfDefine SSL>
</IfDefine>
打開Apache配置文件(httpd.conf),去掉這行的註釋
CODE:
#LoadModule ssl_module modules/mod_ssl.so
Openssl需要一個配置文件。你可以從這裏下載一個可工作的版本http://tud.at/programm/openssl.cnf (或者本主題附件2:
附件: openssl.cnf.rar (2006-9-10 19:11, 1.21 K)
該附件被下載次數 84
)。將它保存到bin/openssl.cnf。
下面你要創建一個SSL證書。你可以打開一個命令行窗口,然後cd到Apache安裝目錄(比如C:\program files\apache group\apache2),敲入
以下命令:
CODE:
bin\openssl req -config bin\openssl.cnf -new -out my-server.csr
你將被問及一句口令短語。請註意,不要使用簡單的幾個詞,而應該輸入一整個句子,比如一篇詩詞的一部份,越長越好。同樣,你還要輸入
你的服務器URL。然後其它的問題都是可選問答的,不過我建議你也將它們填充。
下一步,敲入以下命令:
CODE:
bin\openssl rsa -in privkey.pem -out my-server.key
以及(註意,只有一行)
CODE:
bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
這樣將創建一個4000天後才過期的證書。最後敲入:
CODE:
bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
這些命令在Apache目錄下創建了一些文件(my-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。
將這些文件拷貝到目錄conf/ssl
(比如C:\program files\apache group\apache2\conf\ssl),如果目錄ssl不存在,你必須先創建一個。
重啟Apache服務。
現在可以用類似這樣的url來訪問你的版本庫了https://servername/svn/project
QUOTE:
強制通過SSL來訪問
當你配置了SSL來提高版本庫安全時,你可能想禁用無SSL的http訪問方式,而只允許通過https訪問。要達到這種效果,你要在<Location>塊加
入另外一個指示器SSLRequireSSL。
一個示例<Location>塊可能像這樣:
<Location /svn>
DAV svn
SVNParentPath D:\SVN
SSLRequireSSL
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location>
以上介紹的配置為Apache多庫方式,即一個location可以同時為多個版本庫服務,
假設你的ip為192.168.0.1,在D:\SVN目錄下建了兩個版本庫,proj1和proj2
可以分別用下面兩個url來訪問你的版本庫
CODE:
http://192.168.0.1/svn/proj1
CODE:
http://192.168.0.1/svn/proj1
還有一種配置方式為Apache單庫方式,即一個location只能為一個版本庫服務,
配置時只要將上面的SVNParentPath改為SVNPath,同時將後面的路徑由版本庫的父目錄改為版本庫的目錄
如:
CODE:
<Location /svn>
SVNPath D:\SVN\proj1
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>
apache配置