nprox背后的haproxy背后清漆

时间:2013-08-09 11:50:53

标签: nginx header varnish haproxy

我的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地址。

2 个答案:

答案 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