AWS Network Load Balancer无法获取客户端IP

时间:2019-12-18 13:05:14

标签: amazon-web-services amazon-ecs amazon-elb nlb

我在Application Load Balancer Fargate上运行的应用程序从Network Load Balancer切换到ECS,因为我的应用程序需要静态IP地址。

现在,我无法从X-Forwarded-ForX-Real-Ip HTTP标头获取源/客户端IP地址。在这两个标头中,我都获得了私有IP。在Application Load Balancer上,我能够从X-Forwarded-For标头中获取客户端IP。

Documentation here说NLB保留了源IP地址。

我尚无法解决此问题。我可能做错了什么?

如果使用Network Load Balancer无法做到这一点,那么鉴于我的应用程序正在AWS ECS-Fargate上运行,我该如何实现以下目标:

  1. 具有静态IP(例如用于A记录,IP白名单等)

  2. 可以提取客户端IP地址(例如,使用GeoIP等基于区域的业务逻辑)

2 个答案:

答案 0 :(得分:2)

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

应用磅:

  

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

Network LB并非如此,它是第4层负载平衡方法,因此它不支持HTTP协议。

网络LB将保留源IP“保留源IP地址”,而应用程序LB将不保留。因为要维护IP地址,所以网络LB方法对于X-Forwarded-For标头不起作用,该标头在使用NAT时插入原始IP。

答案 1 :(得分:0)

扩展@paul-dawson 的回答,如果您的后端支持代理协议标准,您实际上可以使用 NLB 获取源 IP,通过在 NLB 和您的服务器上启用它。

详情请见 https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#proxy-protocol