使用代理协议时可以设置X-Real-IP吗?

2024-03-09

我的设置如下:

负载均衡器 → nginx → Traefik

到位的负载平衡器确实not支持代理协议。相反,它将客户端的真实 IP 添加到 TCP 选项字段(哎呀,我知道!Details https://github.com/Huawei/TCP_option_address)。这是 Traefik 不支持的。

为了获取 Traefik 的真实 IP,我在中间添加了一个 nginx,它的作用只是接受端口 80 和 443 上的连接,并在使用 SSL 时添加代理协议。 Traefik 配置为代理协议。事情按预期进行。

不过我想设置X-真实IP使用代理协议时,将标头设置为正确的 IP。当我尝试通过手动设置标题时curl,该值已被使用,因此客户端可以覆盖它。

我怎样才能告诉 Traefikalways set X-真实IP按照代理协议建议的IP?


我解决了我的问题,现在看得更清楚了。 它取决于配置中的哪个节点(负载均衡器 → nginx → Traefik)终止客户端请求。在我的设置(负载均衡器 → Traefik)中,负载均衡器使用 NATing 将请求发送到 Traefik。然后 Traefik 接受客户端的请求并将新请求发送到相应的后端。 因此,我必须将 Traefik 配置为从不信任 X-Real-Ip 标头,但始终在 X-Real-Ip 标头中设置请求的源 ip。 配置是这样的:

    [entryPoints.http.proxyProtocol]
      insecure = true
      trustedIPs = ["10.10.10.1", "10.10.10.2"]
    [entryPoints.http.forwardedHeaders]
      trustedIPs = ["10.10.10.1", "10.10.10.2"]

最常见的配置(我认为)是负载均衡器接受客户端的请求,然后向 nginx(反向代理负载均衡器)发送新请求。在这种情况下,负载均衡器必须设置 X-Real-Ip 标头,nginx 必须将标头传播到 Traefik,并且 Traefik 必须配置为信任 nginx 作为 X-Real-Ip 标头的源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用代理协议时可以设置X-Real-IP吗? 的相关文章

随机推荐