Прекращение SSL nginx для сервера Apache2.2 SVN приводит к бесконечным перенаправлениям

Я пытаюсь настроить SVN-репозиторий на нашем новом сервере компании. Мы используем nginx для завершения SSL и apache в качестве бэкэнда SVN.

Я не знаю, что не так с моей конфигурацией, но если я позвоню 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", за которым следует 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 spam@example.com

        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 на клиенте.

1 ответ

Решение

Что ж, погуглив еще немного, я наконец нашел решение: https://stackoverflow.com/questions/18474825/what-is-the-cause-of-svn-e195019-redirect-cycle-detected-for-url/18474826

После перемещения DocumentRoot в другое место, кроме "svn root", все работает как положено.

Я надеюсь, что это помогает кому-то, имеющему ту же проблему.

Другие вопросы по тегам