我在我的新虚拟机(Debian 6)上执行了以下步骤
https://stackoverflow.com/questions/60736/how-to-setup-a-subversion-svn-server-on-gnu-linux-ubuntu
我刚刚意识到NameVirtualHost
它在哪里并将其配置为NameVirtualHost *:443
但它没有帮助。
我的完整 svnserver 配置:
#<VirtualHost *:80>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
当我尝试通过浏览器访问 VM 之外的站点时,收到 403 Forbidden 错误。
我的dav_svn.conf:
<Location /svn>
# Uncomment this to enable the repository
DAV svn
SVNParentPath /var/svn/svn-repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
# To enable authorization via mod_authz_svn
#AuthzSVNAccessFile /etc/apache2/dav_svn.authz
# The following three lines allow anonymous read, but make
# committers authenticate themselves. It requires the 'authz_user'
# module (enable it with 'a2enmod').
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
#Added
SVNListParentPath On
</Location>
应该允许外部用户访问 svn(如教程中所述)。
那么为什么我会收到 403 错误?
Apache 错误日志:
[Fri Aug 10 17:51:11 2012] [error] [client my.main.pc.ip] Could not fetch resource information. [403, #0]
[Fri Aug 10 17:51:11 2012] [error] [client my.main.pc.ip] (2)No such file or directory: The URI does not contain the name of a repository. [403, #190001]
我将其添加SVNListParentPath On
到我的位置块并在浏览器中获得以下输出:
<D:error><C:error/><m:human-readable errcode="2">
Can't open directory '/var/svn/svn-repos': No such file or directory
</m:human-readable></D:error>
更新:
使用SVNPath
和 代替 使用SVNParentPath
解决了问题。但我想使用多个存储库。
任何帮助都将受到赞赏!
答案1
听起来你SVNParentPath
在 apache 中设置了Location
,但没有在客户端中提供存储库名称。例如:
<Location /svn>
SVNParentPath /my/repos
# ...
</Location>
使用客户端 URL 访问:http://server/svn
该/svn
URL 不是存储库而是父路径,您需要svnadmin create /my/repos/repo1
然后访问http://server/svn/repo1
如果您打开Location
块内的列表父路径指令,您可以列出子存储库:
<Location /svn>
SVNParentPath /my/repos
SVNListParentPath On
# ...
</Location>
答案2
您的块是什么<Location /svn>
样子的?它应该有一个指向您的存储库的 SVNPath 或 SVNParentPath 语句。在同一个块中应该有该<LimitExcept>
块。
/var/svn/$REPOS (或 SVN(Parent)Path 指向的任何内容) 是否归 www-data 所有?它应该是,或者至少应该是 www-data 可读写的。