我想设置nginx与反向代理tracd,但我只想使用1 tracd。
现在,第一个这里是我的这个域的configuration
server { listen 80; server_name bugs.XXXXXXXX.com; access_log /var/log/nginx/XXXXXXXX-bugtracker.access.log proxy; location / { rewrite ^/bugtracker/(.*)$ /$1; rewrite ^/bugtracker$ /; proxy_pass http://127.0.0.1:81/bugtracker/; proxy_redirect default; proxy_set_header Host $host; } location ~ /\.ht { deny all; } }
正如你所看到的那样,有重写规则,因为出于某种原因,所有tracd喷出的url就像/ bugtracker /东西。
现在,这确实是由tracd只是发送像这样的URL通常应该是因为trac是bugs.XXXXXXXX.com/而不是在bugs.XXXXXXXX.com/bugtracker。 那么我怎样才能使tracd / trac显示(在这种情况下)正确的url?
在工作中,我们有一个有很多trac实例的项目环境(每个实例都以不同的用户身份运行),所以我们不能同时为所有的WSGI进程运行。 因此,我设置了许多apache + itk + suexec + fastcgi虚拟主机作为nginx代理上游(每个项目有1个虚拟主机用于trac,1个虚拟主机用于svn)。
我们不想在每个trac和svn实例的nginx中添加1个位置,所以花了几天的时间与ngex的代理指令和正则expression式打交道之后,我发现trac.ini中有几个选项(从0.10.5开始),可以是用于更改默认的redirect位置。
在你的情况下,应该是这样的:
base_url = http://bugs.XXXXXXXX.com/ use_base_url_for_redirect = True
然后,Apacheredirect(或tracdredirect在你的情况),应该指向公共项目的URL,而不是trac默认。
有关更多详细信息,请参见http://trac.edgewall.org/wiki/TracIni 。
location / { proxy_pass http://127.0.0.1:81/; proxy_redirect default; proxy_set_header Host $host; }
我已经切换到使用内置的WSGI服务器,因为这是为生产环境和tracd是不是。
它工作正常,没有上面的问题,我会与tracd。