tracd多个项目+nginx反向代理

tracd多个项目+nginx反向代理

我正在尝试设置 nginx 并使用 tracd 进行反向代理,但是我只想使用 1 个 tracd。

现在首先这是我对该域名的配置

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/something。

现在这确实是由于 tracd 仅像平常一样发送 URL 而导致的,但是 trac 位于 bugs.XXXXXXXX.com/ 而不是 bugs.XXXXXXXX.com/bugtracker。那么我如何才能让 tracd/trac 显示(在这种情况下)正确的 URL?

答案1

在工作中,我们有一个包含大量 trac 实例的项目环境(每个实例都以不同的用户身份运行),因此我们无法同时为所有实例运行 WSGI 进程。因此,我设置了许多 apache+itk+suexec+fastcgi 虚拟主机作为 nginx 代理上游(每个项目有 1 个用于 trac 的虚拟主机和 1 个用于 svn 的虚拟主机)。

我们不想在 nginx 中为每个 trac 和 svn 实例添加 1 个位置,因此在花了几天时间用正则表达式对抗 nginx 代理指令后,我发现 trac.ini 中有几个选项(自 0.10.5 起)可用于更改默认重定向位置。

在你的情况下,它应该是这样的:

base_url = http://bugs.XXXXXXXX.com/
use_base_url_for_redirect = True

然后,apache 重定向(或在您的情况下为 tracd 重定向)应该指向公共项目 URL,而不是 trac 默认。

http://trac.edgewall.org/wiki/TracIni了解更多详细信息。

答案2

location / {

        proxy_pass http://127.0.0.1:81/;
        proxy_redirect default;
        proxy_set_header Host $host;
    }

答案3

我已经切换为使用内置 WSGI 服务器,因为它适用于生产环境而 tracd 则不然。

它运行良好,并且没有出现使用 tracd 时遇到的上述问题。

相关内容