Здравствуйте!
Есть Apache2+mod_dav_svn. Висит на 127.0.0.1:80.
Есть Nginx 0.5.12 с конфигурацией:
....
server {
listen aa.bb.cc.dd:443;
server_name .domain.tld;
ssl on;
ssl_certificate /etc/nginx/ssl-domain.tld.pem;
ssl_certificate_key /etc/nginx/ssl-domain.tld.pem;
location / {
proxy_pass http://127.0.0.1:90;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Geo $geo;
}
}
....
При выполнении команды svn copy на nginx приходит запрос приблизительно
такого вида:
COPY /pathname HTTP/1.1
Host: domain.tld
Destination: https://domain.tld/another_pathname
Когда такой запрос проксируется на апач, то из-за того, что в команде
COPY источник - это URI со схемой http (по крайней мере так видит это
апач, когда сидит на localhost:80), а destination - URI со схемой https
(как это и указано в заголовке Destination), Апач сразу возвращает код
502.
В принципе, поведение апача соответствует RFC2518:
502 (Bad Gateway) - This may occur when the destination is on another
server and the destination server refuses to accept the resource.
В результаты пользоваться в такой конфигурации subversion практически
невозможно.
Если сделать вот такой финт, то все работает нормально:
....
set $fixed_destination $http_destination;
if ($http_destination ~* ^https(.*)$)
{
set $fixed_destination http$1;
}
proxy_pass http://127.0.0.1:90;
.....
proxy_set_header Destination $fixed_destination;
....
На мой взгляд, такую операцию должен проделывать сам nginx :)
---
WBR, Anton