我正面临一个问题,即清漆在特定情况下不发送中介代理IP或公共IP。 情景如下:
有些酒店/公司配置了squid代理,所有互联网流量都通过Squid路由。
首先访问我公司网站的用户点击Load Balancer然后点击Varnish& Apache
问题:
在Apache日志中(配置为记录X-Forwarded-IP)我看到用户专用IP&然后我的负载均衡器私有IP。
172.10.5.10,LoadBalancerIP - - [.......]
在Apache日志中(配置为记录X-Forwarded-IP)我看到用户专用IP,然后他的公共IP也被记录。
172.10.5.10,PublicIP - - [.......]
我的清漆配置如下。
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:我已经谷歌了所有可以找到的链接,并且每个链接都提供了以下的清漆配置
目前为了解决这个问题,我不得不绕过清漆,现在网站流量直接打到了Apache,但我需要让Varnish恢复到Cache和Speedy交付的服务器内容。
如果有人可以指导我如何解决这个问题,我们将不胜感激。
谢谢!
答案 0 :(得分:1)
上述问题已得到解决。归功于Mithrandir @ Varnish IRC频道。谢谢! 需要下面提到的更改才能解决问题。
在default.vcl的开头添加:
import std;
在“if(req.http.x-forwarded-for)”下面添加:
std.collect(req.http.x-forwarded-for);
做varnish configtest&重装。这应该开始显示公共IP。
以下是vmod_std文档中的解释:
收集
Prototype collect(HEADER header) Return value Void Description Collapses the header, joining the headers into one. Example std.collect(req.http.cookie); This will collapse several Cookie: headers into one, long cookie header.
答案 1 :(得分:0)
在Varnish 4中,不再需要这个,see upgrade info here