![如何使对 WAN 的请求从前端 HAProxy IP 而不是后端服务器 IP 出现?](https://linux22.com/image/558808/%E5%A6%82%E4%BD%95%E4%BD%BF%E5%AF%B9%20WAN%20%E7%9A%84%E8%AF%B7%E6%B1%82%E4%BB%8E%E5%89%8D%E7%AB%AF%20HAProxy%20IP%20%E8%80%8C%E4%B8%8D%E6%98%AF%E5%90%8E%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%99%A8%20IP%20%E5%87%BA%E7%8E%B0%EF%BC%9F.png)
我建立了一个类似这样的网络农场:
|-------------------> Apache1
|
HAProxy -|
|
|-------------------> Apache2
HAproxy 有外部 IP xxxx
Apache1 有 2 个接口:内部 yyyy(用于来自 HAProxy 的请求)和外部 IP zzzz
Apache2 有 2 个接口:内部 yy.yy.yy.yy(用于来自 HAProxy 的请求)和外部 IP zz.zz.zz.zz
任何时候我从其中一个 apache 服务器向服务器场外发出请求(例如,使用 php 发出 curl 请求到 google.com)时,REMOTE_ADDR 标头就是发出调用的 apache 服务器的外部 IP(yy.yy.yy.yy 或 zz.zz.zz.zz)。
问题是,我向某些服务器发出此类请求以限制来自 IP 的请求。理想情况下,我希望向他们提供 HAProxy 服务器 (xxxx) 的 IP,而不是向他们提供 2 个后端服务器的 IP。
有没有办法通过配置 apache 或 haproxy 来实现这一点?
答案1
您必须配置 apache 通过代理服务器发送请求。最简单的设置是在 haproxy 机器上安装 squid 并在路由器/防火墙上实现透明代理。
假设它是 Linux,你可以使用它
http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html
如果是其他东西(cisco、checkpoint),它们都应该支持类似的设置。
如果您无权访问防火墙/路由器,您可以在实际的 apache 机器上实现透明代理。