新しい会社のサーバーにSVNリポジトリをセットアップしようとしています。 SSLターミネーションにはnginxを使用し、SVNバックエンドにはApacheを使用しています。
構成の何が問題なのかわかりませんが、svn info https://svn.example.com/repo
を呼び出すと、次のようになります。
Redirecting to URL 'https://svn.example.com/repo':
Redirecting to URL 'https://svn.example.com/repo':
svn: E195019: Redirect cycle detected for URL 'https://svn.example.com/repo'
Wiresharkを使用してnginxフロントエンドからApacheバックエンドへの暗号化されていないトラフィックをスニッフィングすると、「/ repo」に対する「Options」リクエストとそれに続く301 Moved Permanently
リダイレクトがhttp://svn.example.com/repo/
に表示されます。しかし、svnクライアントは明らかにhttps://svn.example.com/repo
へのリダイレクト(nginxによって削除された末尾のスラッシュ)のみを認識し、このリダイレクトを再度取得するためにのみ続きます
私のエラーは、設定するのを忘れた単純な構成ディレクティブなどだと思いますが、3時間以上グーグルして何も役に立たなかった後、ほとんど無力だと感じています。
私のnginxの構成:
server {
ssl on;
ssl_certificate ssl/svn.example.com.crt;
ssl_certificate_key ssl/svn.example.com.key;
listen 1.2.3.4:443 ssl spdy;
allow all;
server_name svn.example.com;
location / {
set $fixed_destination $http_destination;
if ( $http_destination ~* ^https(.*)$ ) {
set $fixed_destination http$1;
}
proxy_set_header Destination $fixed_destination;
proxy_set_header Host $http_Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-By $server_addr:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080;
proxy_redirect http:// https://;
}
}
そして、これはApache仮想ホスト構成です。
<VirtualHost *:8080>
ServerName svn.example.com
ServerAdmin [email protected]
DocumentRoot /srv/svn
<Directory /srv/svn>
Options none
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Location />
Order deny,allow
Allow from all
DAV svn
SVNParentPath /srv/svn
SVNReposName "Subversion Repository"
#our access control policy
AuthzSVNAccessFile /srv/svn/access
#only authenticated users may access the repository
Require valid-user
#how to authenticate a user
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /srv/svn/users
Satisfy All
</Location>
ErrorLog ${Apache_LOG_DIR}/svn_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${Apache_LOG_DIR}/svn_access.log combined
</VirtualHost>
私のソフトウェアバージョン:
# Apache2ctl -v
Server version: Apache/2.2.22 (Debian)
Server built: Feb 1 2014 21:26:04
# nginx -v
nginx version: nginx/1.6.0
#svn --version
svn, version 1.8.9 (r1591380)
compiled May 21 2014, 03:09:46 on x86_64-pc-linux-gnu
Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://Subversion.Apache.org/
The following repository access (RA) modules are available:
* ra_svn : Module for accessing a repository using the svn network protocol.
- with Cyrus SASL authentication
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- using serf 1.3.6
- handles 'http' scheme
- handles 'https' scheme
クライアント上の同じsvnバージョン。
さて、もう少しグーグルした後、私は最終的に解決策を見つけました: https://stackoverflow.com/questions/18474825/what-is-the-cause-of-svn-e195019-redirect-cycle-detected-for- url/18474826#18474826
DocumentRootを「svnroot」以外の場所に移動した後、すべてが期待どおりに機能します。
これが同じ問題を抱えている人に役立つことを願っています。