我的 nginx 服务器位于 haproxy 后面,而 haproxy 位于 Varnish 后面:
请求网络 => 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 上放置的内容:
选项转发
在 nginx 中,我配置了 http_real_ip_module 并且我有:
set_real_ip_from 192.168.1.2; real_ip_header X-Forwarded-For;
谢谢
PS:如果我删除 Varnish,并将 Haproxy 放在端口 80 上,我就有了真实的 IP 地址。
最佳答案
Haproxy 似乎并没有真正消耗 x-forwarded-for header 。看来它只是取代了它。如果您运行的是 1.5 的更高版本(我认为是 17 或更高版本),那么您实际上可以进行变量串联,这意味着您可以自己设置 x-forwarded-for header ,而无需使用选项forwardfor。我在一个非常大的 haproxy 实现中执行此操作,并且运行良好。
另一个选项是更改 haproxy 选项forwardfor header 以使用不同的 header 。这意味着在 nginx 服务器上您必须查看两个 header 。来自 varnish 的将具有最终用户 IP 地址,来自 haproxy 的将具有 varnish 服务器 IP 地址。为此,haproxy 配置如下所示:
option forwardfor header varnish-x-forwarded-for
关于nginx 位于 haproxy 后面 varnish 后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146032/