我有一个 Apache 2.2(位于负载平衡器后面),带有一个通过 LoadModule 指令加载的附加第三方模块(OpenAM Web 代理)。此模块检查每个请求是否经过授权。整个设置正在运行,在第三方模块的日志中,我可以看到对在 apache 的访问日志中找到的每个请求都进行了相应的检查。
如果我通过将以下指令放入 Apache 配置的 VirtualHost 部分来激活基本身份验证,情况就会发生变化:
<Directory /path/to/docroot>
Options -MultiViews
AllowOverride All
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
Allow from <other ips>
AuthType Basic
AuthBasicProvider file
AuthName "AuthZone"
AuthUserFile /path/to/htpasswd
Require valid-user
Satisfy Any
</Directory>
现在基本身份验证可以工作,但第三方模块的检查却不行。似乎每个经过基本身份验证处理的请求都没有到达第三方模块。在后者的日志中,我只能看到与“允许”匹配的请求,因此没有通过基本身份验证处理。
我可以在访问日志中看到所有请求,并且可以看到 Apache 使用代码 200 来响应“丢失”的请求。
这可能是什么原因?错误日志不包含任何有用的信息。
答案1
尽管我无法确切地说出第三方模块以及它是如何加入授权流程的,但我敢打赌原因是Satisfy Any
。
当一种授权方法匹配时,它允许跳过其余的授权步骤 - 这听起来就像您所看到的。