我正在使用 Nginx 作为使用 HTTP Auth 的 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;
}
}
有人知道为什么会发生这种情况吗?
更新- 事实证明,问题出在我最初的问题中:mod_wsgi。这里讨论的站点是一个 Django 站点,事实证明 Apache 确实传递了 auth 变量,但是 mod_wsgi 将它们过滤掉了。
解决方法是使用:
WSGIPassAuthorization On
看http://www.arnebrodowski.de/blog/508-Django,-mod_wsgi-and-HTTP-Authentication.html更多细节
答案1
我不确定这是否会起作用,但请尝试添加以下内容:
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;
如果这不起作用,也尝试这个:
proxy_set_header HTTP_AUTHORIZATION $http_authorization;