apache 本身不托管 svn 仓库,但通过 mod_dav_svn 模块可将 http 请求映射到本地多个独立仓库目录,实现统一入口、多库并存的托管效果;关键在于启用 mod_dav_svn.so 和 mod_authz_svn.so 模块,优先选用 svnparentpath 管理多库,配合 location 配置、权限文件与正确目录所有权。

Apache 本身不托管 SVN 仓库,但通过 mod_dav_svn 模块可将 HTTP 请求映射到本地多个独立仓库目录,实现统一入口、多库并存的托管效果。关键在于正确启用模块、区分单库与多库路径配置、设置一致的权限模型,并确保文件系统权限无误。
确认模块已加载且可用
Apache 必须同时加载两个核心模块才能支持 SVN 的 HTTP 访问:
-
mod_dav_svn.so:提供 WebDAV + SVN 协议解析能力 -
mod_authz_svn.so:支撑基于路径的细粒度权限控制(非必需但强烈推荐)
检查方法:
- 在模块目录(如
/usr/lib64/httpd/modules/或/usr/lib/apache2/modules/)中确认两文件存在 - 打开主配置文件(
httpd.conf或/etc/apache2/mods-enabled/dav_svn.load),确保有以下两行且未被注释:
LoadModule dav_svn_module modules/mod_dav_svn.so<br>LoadModule authz_svn_module modules/mod_authz_svn.so
选择多库托管方式:SVNParentPath 是首选
若需托管多个仓库(如 /var/svn/project-a、/var/svn/project-b),应使用 SVNParentPath 而非 SVNPath。前者让 Apache 自动识别子目录下的所有合法仓库,URL 路径即为仓库名(如 /svn/project-a)。
典型配置示例(放在 /etc/httpd/conf.d/subversion.conf 或站点配置中):
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<location><br> DAV svn<br> SVNParentPath /var/svn<br> SVNListParentPath On # 允许浏览器列出所有可用仓库<br> AuthType Basic<br> AuthName "Subversion Repositories"<br> AuthUserFile /etc/svn-auth-users<br> AuthzSVNAccessFile /etc/svn-authz<br> Require valid-user<br></location>
注意:/var/svn 目录下每个子目录都应是通过 svnadmin create 初始化的完整仓库,且归属 Apache 运行用户(如 apache:apache 或 www-data:www-data)。
为不同仓库分配独立访问路径(可选进阶)
若希望各库使用不同 URL 路径(如 /project-a、/client-api),可为每个仓库单独定义 <location></location> 区块,配合 SVNPath:
<location><br> DAV svn<br> SVNPath /var/svn/project-a<br> AuthType Basic<br> AuthName "Project A"<br> AuthUserFile /etc/svn-auth-users<br> AuthzSVNAccessFile /etc/svn-authz<br> Require valid-user<br></location><br><br><location><br> DAV svn<br> SVNPath /var/svn/client-api<br> AuthType Basic<br> AuthName "Client API"<br> AuthUserFile /etc/svn-auth-users<br> AuthzSVNAccessFile /etc/svn-authz<br> Require valid-user<br></location>
该方式便于为不同项目定制认证逻辑或权限策略文件,但新增仓库需手动追加配置,扩展性略低。
权限与安全基础设置不能跳过
无论采用哪种路径模式,以下三项必须同步完成,否则访问会失败或无权限:
-
创建用户密码文件:用
htpasswd -c /etc/svn-auth-users admin添加首个用户,后续用htpasswd /etc/svn-auth-users user2 -
编写权限策略文件(
/etc/svn-authz):按[project-a:/]、[client-api:/trunk]等节定义用户读写权限 -
修复仓库目录所有权:执行
chown -R apache:apache /var/svn(CentOS)或chown -R www-data:www-data /var/svn(Ubuntu),否则返回 500 错误
配置完成后重启 Apache:systemctl restart httpd(CentOS)或 systemctl restart apache2(Ubuntu)。










