Varnish 4 日志记录 proxy/load 平衡器而不是客户端 IP 地址

Varnish 4 logging proxy/load balancer instead of client IP addresses

所以我试图在 nginx 之前和 AWS 负载均衡器之后在新安装的 Varnish 4(到目前为止我们一直在使用 3)下记录客户端 IP 地址,但似乎无法获取客户端 IP 地址以在 varnish 下登录。

之前在 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 中工作,并且第一个代码块基本上是我读到的此时已编码到 varnish 中的内容。 我也试过这个没有用:

remove req.http.X-Forwarded-For;
set    req.http.X-Forwarded-For = client.ip;

最后一项仍然在 vcl 中。我已将整个 vcl 放在 pastbin (http://pastebin.com/Q1nCprxL) 上,删除了一些不相关的部分。 x-forwarded-for 在那里,清漆只是记录最右边的 IP 地址而不是最左边的 IP 地址。

X-Forwarded-For: 209.53.112.36, 172.25.10.228

所以很可能这些方法都应该有效。但是,您实际使用的是哪一个取决于您。事实证明,我的问题的答案不是由于 3 和 4 之间的任何差异,而是 lack of a return(hash) at the end of vcl_recv()(以及一个可能的错误,它删除了除 X-Forwarded-For 中最后一个 IP 之外的所有内容)。