我面临一个问题,即在特定情况下清漆没有发送中间代理 IP 或公共 IP。场景如下:
一些酒店/公司配置了 squid 代理,所有 Internet 流量都通过 Squid 路由。
访问我公司网站的用户首先点击负载均衡器,然后是 Varnish,然后是 Apache
- Apache 配置了 mod_geoip。我网站上的代码根据 IP 地址进行国家/地区重定向。
问题 :
- 当用户(在该 squid 代理后面)访问负载均衡器后面的我公司的网站时 -> VARNISH -> Apache - 这里 apache 仅获取内部 IP(他的私有 IP)和负载均衡器内部 IP 作为 X-forwarded-for 并因此基于 IP重定向失败!
在 Apache 日志(配置为记录 X-Forwarded-IP)中,我看到用户私有 IP 和我的负载均衡器私有 IP。
172.10.5.10,LoadBalancerIP - - [.......]
- 同一用户在访问另一个没有 Varnish 的站点时,点击负载均衡器 - > Apache - 这里 apache 将用户私有 IP 和用户公共 IP 作为 X-forwarded-for 和基于 IP 的国家/地区重定向工作正常。
在 Apache 日志(配置为记录 X-Forwarded-IP)中,我看到用户私有 IP,然后他的公共 IP 也被记录。
172.10.5.10,公共IP - - [.......]
我的清漆配置如下。
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
PS:我已经用谷歌搜索了我能找到的所有链接,每个链接都给出了以下 Varnish 配置
现在要解决这个问题,我不得不绕过 varnish,现在网站流量直接到达 Apache,但我需要让 Varnish 回到原位,以从缓存和 Speedy 交付中获取服务器内容。
如果有人可以指导我如何解决此问题,将不胜感激。
谢谢!