在 Nginx 后面的 Gunicorn 中为 Trac 设置 REMOTE_USER

Jan*_*bry 5 nginx authentication trac gunicorn

我想在 Nginx 后面的 Gunicorn 中运行 Trac。Nginx 通过 LDAP(有效)处理用户身份验证,但我无法将其REMOTE_USER传递给 Trac。

对于 uWSGI,我会像这样配置 Nginx(经过测试并且可以正常工作):

uwsgi_param REMOTE_USER $remote_user;
Run Code Online (Sandbox Code Playgroud)

对于 Gunicorn,我找不到类似的配置指令。我试过设置标题,但它似乎没有改变任何东西:

proxy_set_header REMOTE_USER $remote_user;
Run Code Online (Sandbox Code Playgroud)

Trac wiki 中一个关于此的条目,指出“wsgi 入口点不处理 [...] 身份验证”,以及使用本地密码文件处理基本身份验证的解决方法,这不是我需要的。我是否需要更改入口点以将此REMOTE_USER标头传递给正确的环境变量?目前只是这样:

import sys
import os

sys.stdout = sys.stderr

os.environ['TRAC_ENV'] = '/path/to/my/trac'

import trac.web.main
application = trac.web.main.dispatch_request
Run Code Online (Sandbox Code Playgroud)

byo*_*ngb 6

奇怪的一个。我通过在 nginx 配置中包含这个来解决这个问题,就像你提到的

proxy_set_header REMOTE_USER $remote_user;
Run Code Online (Sandbox Code Playgroud)

然后对于 trac.wsgi 文件这个

import trac.web.main
def application(environ, start_application):
    environ['REMOTE_USER'] = environ.get('HTTP_REMOTE_USER')
    return trac.web.main.dispatch_request(environ, start_application)
Run Code Online (Sandbox Code Playgroud)

替换这个

import trac.web.main
application = trac.web.main.dispatch_request
Run Code Online (Sandbox Code Playgroud)

在你的 trac.wsgi

显然,正在进行的“HTTP_”有些事情弄乱了 trac 的身份验证

我猜测同样的事情可能可以通过对“HTTP_AUTHORIZATION”请求标头做同样的事情来完成,但我没有尝试这样做。所以我不确定,我只知道它现在有效!