binblog

Subversion, SSL и Nginx

Достаточно часто встречается ситуация когда:

  1. Subversion работает через apache.
  2. Apache находится внутри локальной сети.
  3. Доступ извне происходит через nginx.

Чаще всего, если все настроено корректно, все работает отлично. Однако, когда появляется пункт:

  1. Nginx отдает наружу только SSL.

Возникает пренеприятнейшая проблема - при проксировании через nginx+ssl совсем не работает трансляция некоторых команд svn (возникает ошибка 403), наприер:

Error: Commit failed (details follow):
Error: Server sent unexpected return value (403 Forbidden) in response to COPY request

Простейшим способом избавиться от этой проблемы было бы отказаться от использования apache, однако это не всегда возможно. (Например если пользователи svn авторизуются через ldap)

Поэтому требуется дополнительная и не до конца очевидная настройка apache и nginx. Сейчас не буду вдаваться в подробности что и зачем, ограничусь просто перечислением того что нужно сделать для достижения цели. Дальше считается:

  1. Apache уже настроен и доступ до svn работает.
  2. SSL в nginx тоже настроен.
  3. Внешний адрес svn https://super.mega.ru/svn
  4. Внутренний адрес svn http://192.168.0.2/svn

Настройка со стороны nginx:

location /svn {
  proxy_pass http://192.168.0.2:80/svn;
  proxy_redirect http://super.mega.ru/ /;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP$remote_addr;
  proxy_set_header X-Forwarded-Proto https;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Настройка со стороны apache:

ServerName super.mega.ru
UseCanonicalName on
RequestHeader edit Destination ^https http early

Этого должно быть достаточно.

comments powered by Disqus