我正在尝试从 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 的区别很小。
我输入 tracs: 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。