我有一个 nginx 反向代理服务器,它使用 apache 后端将数据输入到 varnish 缓存中。
php 作为从 apache 启动的 fastcgi 进程运行。
我尝试让一些 php 软件运行,但是基本的 HTTP 身份验证对话框不接受任何用户名或密码。我进行了一些研究,并想出了将其放入 .htaccess 文件中的方法:
RewriteEngine On
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
这已经修复了基本 HTTP 身份验证的身份验证问题。
现在我一直在尝试弄清楚这到底做了什么,所以我的问题是:为什么添加这个重写规则会使身份验证开始起作用?
目前我能想到的就是,在 nginx -> varnish -> apache 的某个环节中,apache 没有收到 auth 标头。我想了解这里发生了什么,这样我就可以在服务器级别实施更改,以阻止这种情况在其他地方发生。
有人可以澄清一下吗?
谢谢
答案1
失去对 HTTP 身份验证的跟踪似乎不是nginx或者漆。
此重写规则不适用于制定验证可访问的标头字段阿帕奇但对于快速CGI后端(假设身份验证应该在内部识别PHP)。
验证标头通常对 Fast-CGI 隐藏。你可以
或者使用此技巧手动
RewriteRule
设置环境变量;REMOTE_USER
或者
mod_fastcgi
配置用于将标头传递给 Fast-CGI 的变量:
FastCgi服务器:
[...]
-pass-header header (none)
要在请求环境中传递的 HTTP 请求标头的名称。此选项使 CGI 环境通常无法使用的标头内容(例如授权)可用
[...]