【问题标题】:Apache `SetEnvIf` and duplicated headersApache `SetEnvIf` 和重复的标头
【发布时间】:2019-12-03 23:47:34
【问题描述】:

我们正在使用这种配置来授予对我们其中一个网站的访问权限

    <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 似乎只针对第一次出现的Header 运行SetEnvIf

有关此行为的文档不清楚。关于如何处理这种情况的任何想法? (注意:我们无法控制我们的反向代理的工作方式,只有 Apache)这可能是一个错误吗?我找不到向谷歌询问这个问题的正确方法,也没有找到任何结果。我也尝试过深入研究 mod_setenvif 的代码,但这不符合我的要求。

精度:CentOS 6、Apache 2.2.15 最新补丁版本

【问题讨论】:

  • 注意:这个问题也被发送到 users@httpd.apache.org 邮件列表。

标签: apache proxy reverse-proxy setenvif


【解决方案1】:

如果SetEnvIf 在第一个参数中看到类似正则表达式的字符,它将进入一种模式,迭代所有匹配正则表达式的标头,直到匹配。

您可以通过指定 ^X-Forwarded-For$ 来使用它,这将遍历此 1 标头的多次出现。

这是解决多少模块处理多次出现的长期行为的一种解决方法。这应该更好地记录为特定于模块的解决方案。

【讨论】:

  • 我从 users@httpd.apache.org 得到了同样的答案。我确实会尽快测试。谢谢
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多