Apache-2.2

Apache SVN:通過客戶端禁止訪問儲存庫,HTTP 可以嗎?

  • January 23, 2012

在我進行一些更改後,我的網路伺服器上的 SVN 似乎已經損壞。它被配置為一個 HTTPS 虛擬主機的一部分,不可普遍訪問。我的 SVN 客戶端給出錯誤“禁止訪問(repo)”,但如果我通過 Web 界面(SVNListParentPath 已打開),一切正常,使用相同的 URL。我什至可以通過瀏覽器訪問這些文件。當我使用客戶端時,我注意到我的 Apache 日誌表明客戶端正在嘗試訪問“/var/www/mysite/svn”,而我的 SVN 儲存庫位於“/home/svn”下。在使用 Elinks 進行故障排除時,我得到了一個重定向頁面,這是否意味著我的伺服器正在使用某種重定向,而這種重定向對於 SVN 客戶端來說是失敗的?該站點的其餘部分通過 SSL 正常工作,只是 SVN 不起作用。謝謝。

這是我對這個站點的 Apache 配置:

#mydomain.co.uk
NameVirtualHost *:443
<VirtualHost *:80>
   ServerAdmin me@mydomain.co.uk
ServerName mydomain.co.uk
   DocumentRoot /var/www/mydomain
   <Directory />
           Options FollowSymLinks
           AllowOverride None
   </Directory>
   <Directory /var/www/mydomain>
           Options Indexes FollowSymLinks MultiViews
           AllowOverride None
           Order allow,deny
           Allow from all
   </Directory>

<Directory /usr/share/ampache>
   RewriteEngine On
           RewriteCond %{HTTPS} off
           RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

<Directory /var/www/mydomain/opendocman>
   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

<Directory /var/www/mydomain/44kg>
           Options Indexes FollowSymLinks MultiViews
           Order deny,allow
           Deny from all
           Allow from 192.168.1
   </Directory>

<Directory /var/www/mydomain/69td>
   Options Indexes FollowSymLinks MultiViews
   Order deny,allow
   Deny from all
   Allow from 192.168.1 127.0.0.1 localhost
   SCGIHandler on
   SCGIServer 127.0.0.1:5000
</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>

ErrorDocument 404 /fourohfour.html

   ErrorLog /var/log/apache2/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
   Options Indexes MultiViews FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
   Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

<VirtualHost *:443>
ServerAdmin me@mydomain.co.uk
ServerName mydomain.co.uk
DocumentRoot /var/www/mydomain/
<Directory />
   Options FollowSymLinks
   AllowOverride None
</Directory>
<Directory /var/www/mydomain/>
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

<Directory /var/www/mydomain/44kg>
   Order deny,allow
   Deny from all
</Directory>

<Location /svn>
 DAV svn
 SVNParentPath /home/svn
 SVNListParentPath on
 AuthType Basic
 AuthName "Excalibur SVN Repository"
 AuthUserFile /etc/apache2/dav_svn.passwd
 Require valid-user
</Location>

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 /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
   Options Indexes MultiViews FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
   Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/QPR/qpr.pem
SSLCertificateKeyFile /etc/ssl/certs/QPR/ca.key
</VirtualHost>

#SquirrelMail
<VirtualHost *:443>
ServerName webmail.mydomain.co.uk
DocumentRoot /usr/share/squirrelmail
SSLEngine on
SSLCertificateFile /etc/ssl/certs/QPR/qpr.pem
SSLCertificateKeyFile /etc/ssl/certs/QPR/ca.key
</VirtualHost>

上次工作是在我添加網路郵件之前,但禁用它並不會恢復 SVN。我沒有真正看到重定向頁面——它給了我足夠的時間在它發生之前發現它是一個 302 重定向,而且我無法重現它。通過瀏覽器,我的所有儲存庫都可以在https://mydomain.co.uk/svn/(repository)獲得,但客戶端中的相同 URL 只會在 SVN CLI 和 Dreamweaver 中出現此錯誤:

Pegasus:Uni Gargravarr$ svn update
svn: access to '/svn/Uni' forbidden

知道了。

我完全忘記了我最近在 Apache 中安裝了“mod-evasive”。禁用它會立即恢復 SVN。原來在 Debian 中存在一個已知的錯誤,即 mod-evasive 和 mod-dav-svn。完全按照這裡的這個問題:

apache svn 伺服器的問題(403 Forbidden)

愚蠢的是,我在發布之前也閱讀了這個問題。我猜我跳過了最後的文章。

TL;DR:Mod-evasive 和 Apache2/SVN 相處不來 :)

引用自:https://serverfault.com/questions/352546