Apache httpd(mod_proxy)似乎丢弃/忽略了X-Forwarded-For链中的第3个IP地址?

问题描述 投票:0回答:1

考虑场景/流程:

remote user (client) > proxy1 > proxy2 > AWS ALB > httpd/reverse_proxy > my_application

当用户的请求遍历其网络时,X-Forwarded-For(XFF)标头会附加每个连续代理的IP地址。例如,当到达ALB时,XFF标头包含“ 192.168.1.100,100.99.98.97”。然后,ALB将ClientIP附加到此标头,在这种情况下,它是proxy2的IP。最后,当请求到达位于我的应用程序前面的反向代理时,XFF标头现在为:“ 192.168.1.100、100.99.98.97、95.94.93.92”。

我看到的问题:在reverse_proxy上,httpd似乎正在忽略或丢弃X-Forwarded-For标头链中的最后一个/最右边的IP,尤其是当多于2个地址时。

    反向代理服务器上的
  • tcpdump显示标题包含full链,因此AWS ALB正在做应做的事并附加proxy2的地址。
  • 当在httpd访问日志中打印XFF标头时,我只看到打印链中的前2个地址。
  • 更重要的是,当尝试对预期的第三
  • 地址采取行动时,该测试失败,进一步证明(我认为),第3个地址被删除。 “采取行动”是指在虚拟主机中设置Require之后尝试调用RemoteIPHeader X-Forwarded-For指令(mod_authz_host)。
  • 如果我从流程中删除proxy1,则在反向代理处的XFF标头中可以看到proxy2的地址,没有问题。
  • 我不确定我在配置或测试中错过了什么,虽然不是标准的,但XFF标头中的多个地址很常见。我仅在Apache httpd 2.4中遇到此问题。在2.2版中,这不是问题,我可以重复相同的设置/流程,并且可以看到链中的所有3个地址。提前致谢。

示例虚拟主机:

<VirtualHost *:80>
  ProxyPreserveHost On
  ServerName myapp.mydomain.com
  Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
  RemoteIPHeader X-Forwarded-For


  ProxyPass / http://10.1.2.3:8080/  timeout=3600
  ProxyPassReverse "/" http://10.1.2.3:8080/

  SetEnv proxy-sendchunked

  ErrorLog /var/log/httpd/error_myapp
  LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined2
  CustomLog /var/log/httpd/access_myapp combined2
  </VirtualHost>

考虑场景/流:远程用户(客户端)> proxy1> proxy2> AWS ALB> httpd / reverse_proxy> my_application当用户的请求遍历其网络时,X-Forwarded -...

apache http http-headers reverse-proxy x-forwarded-for
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.