apache配置

注意:目前windows下的subversion只能跟Apache2.0.x配合,不能用于Apache2.2.x,除非你本身编译php


在全部的Subversion服务器配置方式中,基于Apache的是最灵活的。虽然配置起来有一点点复杂,可是它提供了其它方式所没有的好处:apache


WebDAV
基于Apache配置的Subversion服务器使用了被许多其它程序支持的WebDAV协议。举个例子,你能够在Windows的资源管理器中将这样的一个版本
库挂载成一个“Webfolder”,而后像文件系统中的其它文件夹同样访问它。windows

浏览版本库
你能够在不安装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配合使用。svn

一旦你已经有了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 you@example.com
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>

相关文章
相关标签/搜索