nginx、apache http身份验证

nginx、apache http身份验证

我有一个 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 环境通常无法使用的标头内容(例如授权)可用

[...]

相关内容