Apache SVN:通過客戶端禁止訪問儲存庫,HTTP 可以嗎?
在我進行一些更改後,我的網路伺服器上的 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 相處不來 :)