AWS网络负载均衡器无法获取客户端IP

7
我将我的运行于ECS Fargate的应用程序从Application Load Balancer切换到Network Load Balancer,因为我的应用程序需要静态IP地址。但现在我无法从X-Forwarded-ForX-Real-Ip HTTP头中获取源/客户端IP地址。在这两个头中,我得到私有IP。而在Application Load Balancer上,我能够从X-Forwarded-For头中获取客户端IP。 此文档称NLB保留源IP地址。
我还无法解决这个问题。我可能做错了什么?
如果无法使用网络负载均衡器实现此目标,那么在我的应用程序运行于AWS ECS-Fargate的情况下,我该如何实现以下目标:
1.拥有一个静态IP地址(例如A记录、IP白名单等);
2.能够提取客户端IP地址(例如使用GeoIP等基于区域的业务逻辑)。

@Paul 非常清楚地解释了为什么无法从NLB中的 X-Forwarded-For 头中提取客户端IP,我更新了我的问题,希望能找到解决我的两个目标的方法。 - varnothing
2个回答

12

网络LB不支持像应用程序LB一样的X-Forwarded-For标头。

应用程序LB:

第7层负载均衡 您可以负载平衡HTTP / HTTPS应用程序并使用第7层特定功能,例如X-Forwarded-For标头。

这不适用于网络LB,它是一种第4层负载均衡方法,因此它不了解HTTP协议。

网络LB将保留源IP“保留源IP地址”,而应用程序LB则不会。由于正在维护IP地址,因此网络LB方法不需要X-Forwarded-For标头,该标头在使用NAT时插入原始IP。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接