我的nginx服务器落后于haproxy,它落后于Varnish:
请求网站=>清漆=> HaProxy => nginx的
我遇到的问题是我无法检索客户端的IP地址,在nginx日志中我只有haproxy的ip地址,所以我认为我的XForwardfor很糟糕。
这就是我为Varnish所做的:
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = req.http.rlnclientipaddr;
这就是我对haproxy的看法:
选项forwardfor
在nginx中,我配置了http_real_ip_module,我有:
set_real_ip_from 192.168.1.2; real_ip_header X-Forwarded-For;
由于
PS:如果我删除Varnish,并且我将Haproxy放在端口80上,我就有了真正的IP地址。
答案 0 :(得分:2)
Haproxy似乎并没有真正消耗x-forwarded-for标头。它似乎只是取代它。如果您运行的是更高版本的1.5(我认为17或更高版本),那么您实际上可以进行变量连接,这意味着您可以自己设置x-forwarded-for标头,而无需使用选项forwardfor。我在一个非常大的haproxy实现中这样做,它运行得很好。
另一种选择是更改haproxy选项forwardfor header以使用不同的标头。这意味着在nginx服务器上,您必须查看两个标头。清漆中的那个将具有最终用户IP地址,来自haproxy的那个将具有清漆服务器IP地址。为此,haproxy配置如下所示:
option forwardfor header varnish-x-forwarded-for
答案 1 :(得分:0)
确保Varnish正在设置正确的标题。
在Varnish中设置X-Forwarded-For的实际代码应该是default.vcl [1]中所述:
sub vcl_recv {
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;
}
}
# ...
}
[1] https://www.varnish-cache.org/docs/3.0/reference/vcl.html#examples