分类: LINUX
2010-11-09 18:49:00
1.1 Apache HTTP Server下载地址
Apache HTTP Server (httpd) 2.2.15 is the best available version
Download httpd-2.2.15.tar.gz
1.2 Apache HTTP Server安装
1.2.1 上传解压
以svn用户上传安装包httpd-2.2.15.tar.gz到/opt/svn/software/Apache目录下。
[svn@testbed1 Apache]$ tar xvzf httpd-2.2.15.tar.gz
1.2.2 编译配置
$ ./configure --enable-dav --enable-so --prefix=/opt/svn/apache2/
1.2.3 编译
$ make
1.2.4 安装
$ make install
1.2.5 配置
接着,通过修改PREFIX/conf/下的配置文件,来配置Apache HTTP服务器。
$ vi PREFIX/conf/httpd.conf
修改监听端口号 Listen IP:8008
1.2.6 测试
启动Apache HTTP服务器:
$ PREFIX/bin/apachectl start
$ PREFIX/bin/apachectl stop
现在,可以请求Apache HTTP Server的第一个网页了,这个网页位于DocumentRoot目录下,通常是PREFIX/htdocs/。
1.3 SVN与Apache HTTP Server结合
通过 HTTP 协议访问版本库是 Subversion 的亮点之一。使用 Http 协议意味着只需要打开浏览器,输入 URL 即可轻松的浏览整个版本库。由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518。
为了使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件,即mod_dav_svn-1.6.12-1.rhel5.x86_64.rpm组件包,可以在 Subversion 的安装目录中找到。将其拷贝到 Apache 安装目录的 modules 文件夹下。接下来就是配置 Apache 的 httpd.conf 文件,让 Apache 在启动的时候加载上述模块。
用root用户进入目录,查找mod_dav_svn插件mod_dav_svn.so和mod_authz_svn.so
[root@testbed1 /]# find -name mod_dav_svn.so
./usr/lib64/httpd/modules/mod_dav_svn.so
[root@testbed1 /]# find -name mod_authz_svn.so
./usr/lib64/httpd/modules/mod_authz_svn.so
[root@testbed1 /]# su - svn
$cp /usr/lib64/httpd/modules/mod_dav_svn.so /opt/svn/apache2/modules/
$cp /usr/lib64/httpd/modules/mod_authz_svn.so /opt/svn/apache2/modules/
在httpd.conf文件的最后添加如下内容:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNPath /opt/svn/svndata/repos
Location 标签指出访问的 URL 以及在服务器上的实际位置。配置完毕后重新启动 Apache,打开浏览器,输入 将会看到SVN的管理界面。
这表示 Apache 的 dav_svn 模块已经可以正常工作了。用户可以使XX用任何一种 Subversion 的客户端通过 Http 协议访问你的版本库。 如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:
DAV svn SVNParentPath /opt/svn/svndata
"SVNParentPath /opt/svn/svndata" 表示/opt/svn/svndata下的每个子目录都是一个版本库。可以通过 /repos1,/repos2 来访问。
现在你的版本库任何人都可以访问,并且有完全的写操作权限。也就是说任何人都可以匿名读取,修改,提交,以及删除版本库中的内容。显然大部分场合这是不符合需求的。那么如何进行权限设置呢,Apache 提供了基本的权限设置。
首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下: [svn@testbed1 ~]$ mkdir -p /opt/svn/conf [svn@testbed1 ~]$ vi /opt/svn/conf/password.conf [svn@testbed1 ~]$ /opt/svn/apache2/bin/htpasswd /opt/svn/conf/password.conf zhaiqi New password: Re-type new password: Adding password for user zhaiqi 如果password.conf文件不存在,可以加上-c选项让htpasswd新建一个,创建好的文件内容是用户名加上密码的 MD5 密文。 接下来修改 httpd.conf,在 Location 标签中加入如下内容: AuthType Basic AuthName "svn repos" AuthUserFile /opt/svn/conf/password.conf Require valid-user 重新启动 Apache, 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有password.conf文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 "Require valid-user" 为 "Require user user1 user2 " 将只有user1和user2可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:
require valid-user
如上配置将使匿名用户有读取权限,而限制只有password.conf中配置的用户可以使用写操作。如果这还不能满足你的要求,可以使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。
用mod_authz_svn进行目录访问控制。
首先需要让Apache将mod_authz_svn模块加载进来。在Subversion的安装目录中找到mod_auth_svn模块,将其拷贝到Apache安装目录的modules子目录下。修改httpd.conf 文件,找到LoadModule dav_svn_module modules/mod_dav_svn.so,在其后面加上LoadModule authz_svn_module modules/mod_authz_svn.so。
现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:
DAV svn SVNPath /opt/svn/svndata/repos AuthType Basic AuthName "svn repos" AuthUserFile /opt/svn/conf/password.conf AuthzSVNAccessFile /opt/svn/conf/authz.conf Satisfy Any Require valid-user
AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定,如: #两个分组:admingroup,visitorgroup,developers [groups] admingroup = zhaiqi,wujinkang visitorgroup = carlos,marco developers = jack,michel,rose,user1,user2,user3 #在根目录下指定所有的用户有读权限 [/] * = r #追加admingroup组用户有读写权限 @admingroup = rw #在branches/dev目录下指定developers组的用户有读写权限 [/branches/dev] @developers = rw #在/tags组下给予用户Jack读写权限 [/tags] jack = rw #禁止所有用户访问/private目录 [/private] * = #给visitorgroup组用户读权限 @visitorgroup = r 使用SVNParentPath代替SVNPath来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中Jack将对所有版本库里的/tags目录具有读写权限。如果要对具体每个版本库配置,用如下的语法: [groups] project1_admin = user1 user2 project2_admin = jack michel rose [repos1:/] * = r @ project1_admin = rw [repos2:/] * = r @ project2_admin = rw 这样项目1的admin组只能对repos1版本库下的文件具有写权限而不能修改版本库repos2,同样项目2的admin也不能修改repos1版本库的文件。
chinaunix网友2010-11-10 15:23:18
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com