Проблема с двойным кодированием заголовка при проксировании
Alexander Gerasiov
gq на cs.msu.su
Ср Авг 31 15:54:08 UTC 2016
Добрый день.
Использую nginx в качестве forward proxy к apache с mod_svn.
Известный трюк: для работы методов COPY MV требуется переписывать
заголок Destination, чтобы поменять схему с https на http
set $fixed_destination $http_destination;
if ($http_destination ~* ^https(.*)$)
{
set $fixed_destination http$1;
}
location / {
proxy_pass http://svn:80/;
proxy_set_header Destination $fixed_destination;
proxy_set_header Host $host;
}
Это работает, но есть нюанс: если перемещаемый файл содержит
кириллицу в имени, то он оказывается дважды перекодирован:
Приходит в nginx он в виде:
Destination: https://host/test/!svn/txr/1-1/dir2/%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9
Дальше выделяется при помощи регулярного выражения, конструируется
новый заголовок, оперируя всё еще закодированной строкой.
И дальше nginx _еще_раз_ кодирует этот заголовок при отправке, так
что в apache уже приходит
Destination: http://host/test/!svn/txr/1-1/dir2/%25D1%2580%25D1%2583%25D1%2581%25D1%2581%25D0%25BA%25D0%25B8%25D0%25B9
В результате имя файла при копировании/перемещении бьется.
Вопрос: что с этим делать? Как сказать nginx, чтобы он не кодировал заголовок
при помощи urlencode? Или может как декодировать строку перед передачей
ее в proxy_set_header?
--
Best regards,
Alexander Gerasiov
Contacts:
e-mail: gq на cs.msu.su Homepage: http://gerasiov.net Skype: gerasiov
PGP fingerprint: 04B5 9D90 DF7C C2AB CD49 BAEA CA87 E9E8 2AAC 33F1
Подробная информация о списке рассылки nginx-ru