更新:

更新:

我在我的新虚拟机(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

/svnURL 不是存储库而是父路径,您需要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 可读写的。

相关内容