我们正在使用这种配置来授予对我们其中一个站点的访问权限
<LocationMatch "/*">
Order deny,allow
Deny from all
Allow from 127.0.0.0/8
SetEnvIf X-Forwarded-For "(,| |^)192\.168\." WhiteIP
SetEnvIf X-Forwarded-For "(,| |^)172\.(1[6-9]|2\d|3[0-1])\." WhiteIP
SetEnvIf X-Forwarded-For "(,| |^)10\." WhiteIP
Allow from env=WhiteIP
</LocationMatch>
事实上,在这个 Apache 服务器前面还有另一个反向代理,所以所有客户端都会有标头。
问题是有时客户端有其他代理在他们身边,并且X-Forwarded-For
标题将被复制或连接。我们使用正则表达式技巧正确处理连接(,| |^)
,但问题是 Apache 似乎SetEnvIf
只针对第一次出现的 Header 运行。
文档不清楚这种行为。关于如何处理这种情况的任何想法?(注意:我们无法控制我们的反向代理的工作方式,只有 Apache)这可能是一个错误吗?我找不到向谷歌询问这个问题的正确方法,也没有找到任何结果。我也尝试过深入研究 mod_setenvif 的代码,但这超出了我的范围。
精度:CentOS 6、Apache 2.2.15 最新补丁版本