如何让 nginx 将 HTTP_AUTHORIZATION 标头传递给 Apache

cod*_*ole 7 nginx django wsgi mod-wsgi

我使用 Nginx 作为使用 HTTP 身份验证的 Apache 服务器的反向代理。出于某种原因,我无法将 HTTP_AUTHORIZATION 标头传递给 Apache,它似乎被 Nginx 过滤掉了。因此,没有请求可以进行身份​​验证。

请注意,基本身份验证是动态的,因此我不想在我的 nginx 配置中对其进行硬编码。

我的 nginx 配置是:

server {

    listen   80;
    server_name  example.co.uk ;

    access_log  /var/log/nginx/access.cdk-dev.tangentlabs.co.uk.log;

    gzip on;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_read_timeout 120;

    location / {
            proxy_pass http://localhost:81/;
    }

    location ~* \.(jpg|png|gif|jpeg|js|css|mp3|wav|swf|mov|doc|xls|ppt|docx|pptx|xlsx|swf)$ {
    if (!-f $request_filename) {
        break;
                proxy_pass http://localhost:81;
    }

            root /var/www/example;
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

更新- 原来这个问题是我在我的原始问题中忽略的:mod_wsgi。这里有问题的站点是一个 Django 站点,事实证明 Apache 确实通过了 auth 变量,但是 mod_wsgi 将它们过滤掉了。

决议是使用:

WSGIPassAuthorization On
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅http://www.arnebrodowski.de/blog/508-Django,-mod_wsgi-and-HTTP-Authentication.html

Edu*_*nec 3

我不确定这是否有效,但尝试添加以下内容:

proxy_pass_request_headers on;
proxy_no_cache $cookie_nocache  $arg_nocache$arg_comment;
proxy_no_cache $http_pragma     $http_authorization;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
Run Code Online (Sandbox Code Playgroud)

如果这不起作用也尝试一下:

proxy_set_header HTTP_AUTHORIZATION $http_authorization;
Run Code Online (Sandbox Code Playgroud)