LINUX.ORG.RU
ФорумAdmin

[centos] nginx, httpd subversion proxy

 


0

0

Возникла тут необходимость поднять Subversion как WebDAV на Apache httpd, но вот ведь незадача: пихать апач голой попой в интернет — не самая разумная идея, причём 80-ый порт всё равно уже занят nginx, а хочется красиво вынести это дело в поддомен.

В итоге, было наброшено следующее решение, в /etc/httpd/conf.d/subversion.conf:

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<VirtualHost 127.0.0.1:11078>
    DocumentRoot /var/www/svn

    <Location />
        DAV svn
        Satisfy Any
        SVNParentPath /var/www/svn
        SVNListParentPath on
        AuthType Basic
        AuthName "Authorization Realm"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
    </Location>
</VirtualHost>

При этом в /etc/nginx/conf.d/upstream-scm.conf:

upstream svn {
    server 127.0.0.1:11078 max_fails=3 fail_timeout=30s;
}

server {
    server_name  svn.mydomain.tld;
    listen       80;

    charset utf-8;

    proxy_redirect off;
    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_read_timeout 700;
    proxy_send_timeout 700;
    proxy_connect_timeout 700;

    location / {
        proxy_pass  http://svn;
    }
}

При входе браузером по адресу svn.mydomain.tld всё хорошо и радужно, однако если попробовать выполнить чекаут, сталкиваемся с проблемой:

eveel@notazik{~}% svn co http://svn.mydomain.tld/one-nice-project/
svn: Repository moved permanently to 'http://svn.mydomain.tld:11078/one-nice-project/'; please relocate

Это меня достаточно сильно угнетает, и порождает резонный вопрос: что же делать и как запретить ему переписывать порт?

★★

С горем пополам решил часть проблемы, добился успешного чекаута:

1) В конфиге conf.d/subversion.conf указал Location /svn вместо /

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<VirtualHost 127.0.0.1:11078>
    DocumentRoot /var/www/svn

    <Location /svn>
        DAV svn
        Satisfy Any
        SVNParentPath /var/www/svn
        SVNListParentPath on
        AuthType Basic
        AuthName "Authorization Realm"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
    </Location>
</VirtualHost>

2) При этом /etc/nginx/conf.d/upstream-scm.conf остался прежним.

При импорте же получаем кучу радостей жизни:

eveel@notazik{~}% svn import hibtutorial http://svn.mydomain.tld/svn/ -m 'initial commit'
svn: Repository moved permanently to 'http://svn.mydomain.tld:11078/svn/'; please relocate

Главное, в логах апача при этом:

[Mon Aug 24 19:02:06 2009] [error] [client 127.0.0.1] Could not fetch
resource information.  [301, #0]
[Mon Aug 24 19:02:06 2009] [error] [client 127.0.0.1] (2)No such file
or directory: Requests for a collection must have a trailing slash on
the URI.  [301, #0]

eveel ★★
() автор топика
Ответ на: комментарий от eveel

Тема закрыта, проблема решена.

Решил не сношать себе мозги и на каждый проект будет создаваться соответствующий Location в апаче, минуя SVNParentPath.

eveel ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.