nginx с tracd и subs_filter
Пытаюсь перейти с apache на nginx. Одна из проблем - миграция многосайтовой трассировки.
Согласно TracNginxRecipe я создал скрипт tracd:
/usr/bin/tracd --daemonize --pidfile=/var/run/tracd.pid --port=3050 --hostname=127.0.0.1 --env-parent-dir=/var/lib/trac/
и модифицировал /etc/nginx/sites-enabled/example.com.conf
(...)
upstream tracd {
server 127.0.0.1:3050;
}
(...)
location ~ /(.*?)/chrome/ {
rewrite /(.*?)/chrome/(.*) /$1/htdocs/$2 break;
root /var/lib/trac;
}
location /trac/ {
keepalive_timeout 70;
add_header Front-End-Https on;
proxy_set_header Accept-Encoding "";
proxy_pass http://tracd/;
subs_filter 'http://tracd/' 'https://example.com/trac/' g;
sub_filter_once off;
}
(...)
И вуаля! Оно работает. Почти. Потому что между nginx и tracd есть небольшая разница.
Вхожу в траки:
https://example.com/trac/my_trac
, но tracd изучает
https://127.0.0.1/my_trac
. Что должно быть нормально, но trac считает, что uri
/my_trac
так что все ссылки без
/trac/
, например.
https://example.com/my_trac/login
вместо
https://example.com/trac/my_trac/login
Я пробовал использовать subs_filter
subs_filter '://example.com/' '://example.com/trac/' g;
sub_filter_once off;
но ничего не происходит ...
Я думаю, что могу заставить trac добавить его в uri, но я предпочитаю модифицировать nginx, потому что если мне нужно перейти на другую систему, я не хочу изменять trac.