所以我试图在nginx前面和AWS负载均衡器后面的Varnish 4的新安装(我们已经使用3到达此点)下记录客户端IP地址,并且可以&# 39;似乎让客户端的IP地址记录在清漆下。
之前在3中,我们在sub_recv()的顶部使用了它:
std.collect(req.http.x-forwarded-for);
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;
}
以及另一台服务器:
std.collect(req.http.x-forwarded-for);
if (req.http.x-forwarded-for) {
std.log("ip:" + req.http.x-forwarded-for);
} else {
std.log("ip:" + client.ip);
}
然而,这些都没有在Varnish 4中工作,而且第一个代码块基本上是从我所阅读的这一点开始编码成清漆的。 我也试过这个无用:
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
这最后一项仍然是vcl中的内容。我已将整个vcl放在pastbin(http://pastebin.com/Q1nCprxL)上,删除了一些不相关的部分。 x-forwarded-for就在那里,varnish只是记录最右边的IP地址而不是最左边的ip地址。
X-Forwarded-For: 209.53.112.36, 172.25.10.228
答案 0 :(得分:-1)
所以这些方法很可能都有效。然而,你实际使用的是哪一个取决于你。事实证明,我的问题的答案不是由于3和4之间的任何差异,而是lack of a return(hash) at the end of vcl_recv()(并且除了X-Forwarded-For中的最后一个IP之外,它可能会删除所有错误)。