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

AWS Network Load Balancer unable to get client IP

我从 Application Load Balancer to Network Load Balancer for my application running on ECS Fargate 切换过来,因为我的应用程序需要静态 IP 地址。

现在我无法从 X-Forwarded-ForX-Real-Ip HTTP header 获取 source/client IP 地址。在这两个 header 中,我都获得了私有 IP。在 Application Load Balancer 时,我能够从 X-Forwarded-For header.

获取客户端 IP

Documentation here 表示 NLB 保留源 IP 地址。

我还不能解决这个问题。我可能做错了什么?

如果使用网络负载均衡器无法做到这一点,鉴于我的应用程序在 AWS ECS-Fargate 上 运行:

,我该如何实现以下目标
  1. 拥有静态IP(例如A记录、IP白名单等)

  2. 可以提取客户端 IP 地址(例如 region-based 使用 GeoIP 等的业务逻辑)

网络 LB 不会像应用程序 LB 那样支持 X-Forwarded-For header。

申请 LB:

Layer-7 Load Balancing You can load balance HTTP/HTTPS applications and use layer 7-specific features, such as X-Forwarded-For headers.

Network LB 不是这种情况,它是第 4 层负载平衡方法,因此它不支持 HTTP 协议。

网络 LB 将维护源 IP "Preserve Source IP address" 而应用程序 LB 则不会。因为正在维护 IP 地址,网络 LB 方法对 X-Forwarded-For header 没有用,它在使用 NAT 时插入原始 IP。

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

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