traefik - 使用代理协议时可以设置 X-Real-IP 吗?
问题描述
我的设置如下:
负载均衡器 → nginx → Traefik
现有的负载均衡器不支持代理协议。相反,它将客户端的真实 IP 添加到 TCP 选项字段(哎呀,我知道!详细信息)。这是 Traefik 不支持的。
为了获得 Traefik 的真实 IP,我在中间添加了一个 nginx,它只接受端口 80 和 443 上的连接,并在使用 SSL 时添加代理协议。Traefik 配置为代理协议。事情按预期工作。
但是,当使用代理协议时,我想将X-Real-IP标头设置为正确的 IP。当我尝试通过curl手动设置标题时,会使用该标题,因此客户端可以覆盖它。
如何告诉 Traefik始终按照代理协议的建议将X-Real-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 标头的源。
推荐阅读
- c# - c#中的MultiCast委托
- c# - 使用 RegularExpressionAttribute 在 MVC 模型验证中未触发 IsValid()
- python - 在张量板中记录目录执行
- associative-array - 将多个关联分配给一个
- acumatica - Acumatica:按聚合获取项目组中的计数 BqlField 值
- java - 从 netbeans.exe 创建别名
- c# - Visual Studio 2017 调试 MVC 403.14
- angular - 类型 'void' 不能分配给类型 'Recipe[]'。这行代码中的错误 this: recipes = this.recipeService.getRecipes();
- angular - 在我的测试存根中强制使用 rxjs 出错
- dolphindb - 在 DolphinDB 中单引号 (') 和双引号 (") 一样吗