本文讲述如何利用Apache配置实现http的方式访问Subversion,本文的目录如下:
配置http匿名访问
增加用户名和密码控制
增加文件目录控制
【前提要求】
安装apache httpd,可参考:图文介绍apache2.2.x安装配置(http://www.micmiu.com/enterprise-app/cluster/apache-httpd-install/)
安装SVN服务Subversion,可参考:图文介绍windows搭建SVN服务端的基本步骤(http://www.micmiu.com/techother/software/subversion-windows-guide/)
启动Subversion服务(命令:svnserve -d -r d:\svnroot),创建好repository,并导入一个项目,比如:micmiu-app:
subversion 跟目录结构如下:
D:\>tree svnroot
卷 work 的文件夹 PATH 列表
卷序列号为 2AF7-9BD9
D:\SVNROOT
└─repo
├─conf
├─db
│ ├─revprops
│ │ └─0
│ ├─revs
│ │ └─0
│ ├─transactions
│ └─txn-protorevs
├─hooks
└─locks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
D:\>treesvnroot
卷work的文件夹PATH列表
卷序列号为2AF7-9BD9
D:\SVNROOT
└─repo
├─conf
├─db
│├─revprops
││└─0
│├─revs
││└─0
│├─transactions
│└─txn-protorevs
├─hooks
└─locks
svn客户端连接截图如下:
【一】、配置http匿名访问
Apache httpd 安装路径:D:\Program Files (x86)\Apache2.2\
Subversion 安装路径:D:\Program Files (x86)\Subversion\
把%Subversion_home%\bin\mod_dav_svn.so文件复制到%apache_home%\moduals\
在%apache_home%\conf\httpd.conf 文件的末尾添加如下内容:
# load http svn conf
Include conf/extra/httpd-svn.conf
1
2
# load http svn conf
Includeconf/extra/httpd-svn.conf
创建%apache_home%\conf\extra\httpd-svn.conf文件,具体内容如下:
# load module for svn
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
DAV svn
SVNParentPath d:/svnroot
#SVNListParentPath on
1
2
3
4
5
6
7
8
9
# load module for svn
LoadModuledav_modulemodules/mod_dav.so
LoadModuledav_svn_modulemodules/mod_dav_svn.so
DAVsvn
SVNParentPathd:/svnroot
#SVNListParentPath on
配置好后需要重启Apahce服务,用svn客户端,打开:http://localhost/svn/repo/micmiu-app,如下图:
这时会发现已经实现了http访问SVN了,不过同时会发现之前在SVN服务端配置的用户名和密码控制无效了,如何控制请看下面接下来的内容。
【二】、增加用户名和密码控制
1.基本认证访问控制 htpasswd
创建密码文件,示例用于用户michael和micmiu 的访问控制:
D:\Program Files (x86)\Apache2.2\bin>htpasswd -c -m "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd" michael
New password: *******
Re-type new password: *******
Adding password for user michael
D:\Program Files (x86)\Apache2.2\bin>htpasswd -m "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd" micmiu
New password: ******
Re-type new password: ******
Adding password for user micmiu
1
2
3
4
5
6
7
8
9
D:\ProgramFiles(x86)\Apache2.2\bin>htpasswd-c-m"d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd"michael
Newpassword:*******
Re-typenewpassword:*******
Addingpasswordforusermichael
D:\ProgramFiles(x86)\Apache2.2\bin>htpasswd-m"d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd"micmiu
Newpassword:******
Re-typenewpassword:******
Addingpasswordforusermicmiu
ps:-c 表示创建密码文件;-m 表示用md5对密码加密
修改 conf\extra\httpd-svn.conf 文件,内容如下:
# load module for svn
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
DAV svn
SVNParentPath d:/svnroot
#SVNListParentPath on
# Authentication: Basic
AuthName "welcome to micmiu svn"
AuthType Basic
AuthUserFile "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd"
# Authorization: Authenticated users only
Require valid-user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# load module for svn
LoadModuledav_modulemodules/mod_dav.so
LoadModuledav_svn_modulemodules/mod_dav_svn.so
DAVsvn
SVNParentPathd:/svnroot
#SVNListParentPath on
# Authentication: Basic
AuthName"welcome to micmiu svn"
AuthTypeBasic
AuthUserFile"d:/Program Files (x86)/Apache2.2/conf/svn-auth.htpasswd"
# Authorization: Authenticated users only
Requirevalid-user
配置好后需要重启Apahce服务,用svn客户端,打开:http://localhost/svn/repo/micmiu-app,如下图:
从上图可见提示你输入正确的用户名和密码才能访问。
2.Digest 方式认证控制 htdigest
创建密码文件,示例用于用户michael和micmiu 的访问控制:
D:\Program Files (x86)\Apache2.2\bin>htdigest -c "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest" "my subversion repo" michael
Adding password for michael in realm my subversion repo.
New password: *******
Re-type new password: *******
D:\Program Files (x86)\Apache2.2\bin>htdigest "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest" "my subversion rep" micmiu
Adding user micmiu in realm my subversion rep
New password: ******
Re-type new password: ******
1
2
3
4
5
6
7
8
9
D:\ProgramFiles(x86)\Apache2.2\bin>htdigest-c"d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest""my subversion repo"michael
Addingpasswordformichaelinrealmmysubversionrepo.
Newpassword:*******
Re-typenewpassword:*******
D:\ProgramFiles(x86)\Apache2.2\bin>htdigest"d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest""my subversion rep"micmiu
Addingusermicmiuinrealmmysubversionrep
Newpassword:******
Re-typenewpassword:******
修改conf\extra\httpd-svn.conf 文件,内容如下:
# load module for svn
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
DAV svn
SVNParentPath d:/svnroot
#SVNListParentPath on
# Authentication: Digest
#AuthName "welcome to micmiu svn"
#AuthType Digest
#AuthUserFile "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest"
# Authorization: Authenticated users only
Require valid-user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# load module for svn
LoadModuledav_modulemodules/mod_dav.so
LoadModuledav_svn_modulemodules/mod_dav_svn.so
DAVsvn
SVNParentPathd:/svnroot
#SVNListParentPath on
# Authentication: Digest
#AuthName "welcome to micmiu svn"
#AuthType Digest
#AuthUserFile "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest"
# Authorization: Authenticated users only
Requirevalid-user
配置好后需要重启Apahce服务,用svn客户端,打开:http://localhost/svn/repo/micmiu-app,和上面一样会提示你输入用户名和密码。
【三】、增加文件目录控制
1.把%Subversion_home%\bin\mod_authz_svn.so文件复制到%apache_home%\moduals\
2.修改 conf\extra\httpd-svn.conf 文件,内容如下:
# load module for svn
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNParentPath d:/svnroot
#SVNListParentPath on
# Authentication: Digest
#AuthName "welcome to micmiu svn"
#AuthType Digest
#AuthUserFile "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest"
# Authentication: None
# Authorization: Path-based access control; authenticated users only
AuthzSVNAccessFile "d:/Program Files (x86)/Apache2.2/conf/svn-authz-file"
#Satisfy Any
# Authorization: Authenticated users only
Require valid-user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# load module for svn
LoadModuledav_modulemodules/mod_dav.so
LoadModuledav_svn_modulemodules/mod_dav_svn.so
LoadModuleauthz_svn_modulemodules/mod_authz_svn.so
DAVsvn
SVNParentPathd:/svnroot
#SVNListParentPath on
# Authentication: Digest
#AuthName "welcome to micmiu svn"
#AuthType Digest
#AuthUserFile "d:/Program Files (x86)/Apache2.2/conf/svn-auth.htdigest"
# Authentication: None
# Authorization: Path-based access control; authenticated users only
AuthzSVNAccessFile"d:/Program Files (x86)/Apache2.2/conf/svn-authz-file"
#Satisfy Any
# Authorization: Authenticated users only
Requirevalid-user
3.创建%apache_home%\conf\svn-authz-file文件,具体内容如下:
[/]
* = rw
[repo:/micmiu-app/src]
* =
1
2
3
4
[/]
*=rw
[repo:/micmiu-app/src]
*=
该配置表示:可以访问对根目录读写,同时对micmiu-app/src目录没有任何权限
4.配置好后需要重启Apahce服务,用svn客户端,打开:http://localhost/svn/repo/micmiu-app,过程如下:
可见测试结果和我们预期设想的效果一致。
一些参考资料:
http://subversion.apache.org/faq.zh.html
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.html
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html