nginx 位于 haproxy 后面 varnish 后面

标签 nginx header varnish haproxy

我的 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/

相关文章:

linux - 在 Amazon EC2 上安装 Varnish Cache 3.0

jquery - 使用 jQuery 的 JSONP 请求会绕过 Varnish 吗?

node.js - 在 EC2/Nodejs 后端 Redis/Varnish 中存储元数据和缓存 api 响应数据?

bash - 同步获取nginx版本?

c++ - 类枚举器值不能作为参数传递给另一个类的函数

c++ - 使用纯头库时增加链接器错误

c++ - 在另一个头文件 C++ 中创建一个类的实例

除根目录外的任何其他页面上的 django、nginx、gunicorn 404

javascript - 什么是与 Web 服务器相关的静态内容?

ssl - NGINX HTTPS 服务器 - SSL_ERROR_BAD_CERT_DOMAIN