【问题标题】:AWS Network Load Balancer unable to get client IPAWS 网络负载均衡器无法获取客户端 IP
【发布时间】:2021-06-14 20:07:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

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

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


【解决方案1】:

网络 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。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2018-04-02
      • 2021-12-19
      相关资源
      最近更新 更多