当前位置: 首页 > 知识库问答 >
问题:

如何使用代理协议版本2通过AWS网络负载均衡器获取客户端的真实IP地址?

钱锦
2023-03-14

目前,我们正在通过AWS网络负载平衡器将请求传递给AWS应用程序负载平衡器。然而,我们正试图保留请求的原始IP地址,但这正在被剥离。我们正在尝试启用代理协议v2,但这会导致错误。AWS ALB是否使用代理协议v2?

共有2个答案

督灿
2023-03-14

从本文档中可以看出,您是针对以下目标群体执行此操作的:https://docs.amazonaws.cn/en_us/elasticloadbalancing/latest/network/elb-ng.pdf

特别是:使用新控制台启用代理协议v2

  1. 在打开Amazon EC2控制台https://console.amazonaws.cn/ec2/.
  2. 在导航窗格的负载平衡下,选择目标组
  3. 选择目标组的名称以打开其详细信息页面
  4. 在“组详细信息”页面的“属性”部分中,选择“编辑”
  5. 在编辑属性页面上,选择代理协议v2
  6. 选择保存更改

甚至通过脚本(摘自https://docs.cloudbees.com/docs/cloudbees-ci/latest/eks-install-guide/eks-prerequisites-helm-install),例如:

#!/bin/bash -eu
export AWS_PAGER=""
hostname=$(kubectl get -n ingress-nginx services ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].hostname}')
loadBalancerArn=$(aws elbv2 describe-load-balancers  --query "LoadBalancers[?DNSName==\`$hostname\`].LoadBalancerArn"  --output text)
targetGroupsArn=$(aws elbv2 describe-target-groups --load-balancer-arn $loadBalancerArn --query TargetGroups[\*].TargetGroupArn --output text)
for targetGroupArn in $targetGroupsArn; do
  aws elbv2 modify-target-group-attributes --target-group-arn $targetGroupArn --attributes Key=proxy_protocol_v2.enabled,Value=true --output text
done
单于季
2023-03-14

AWS ALB是否使用代理协议v2?

不,没有。代理协议仅适用于NLB和CLB,因为它们在第4层中运行(CLB有TCP侦听器)。ALB是第7层,它使用X-Forwarded-For、X-Forwarded-Proto和X-Forwarded-Port来保存IP源信息。

 类似资料:
  • 我在GKE中创建了一个类型为LoadBalancer的kubernetes服务。 这是一个nginx服务,尝试获取源客户端IP。喜欢 但结果将是: 就像在kubernetes IP中一样。 $http_x_forwarded_for为空。 我不知道为什么这和文件上说的不一样。 https://cloud.google.com/load-balancing/docs/network 网络负载平衡是一

  • 问题内容: AWS刚刚向ELB添加了对PROXY协议的支持,该协议封装了TCP流并添加了客户端IP地址(如代理所示),以便后端服务器可以访问客户端的IP(因为否则它将只看到ELB的IP) 。 我知道ELB可以在HTTP(S)模式下运行,在该模式下ELB可以插入标头,但是我在TCP模式下运行ELB 以便可以通过SPDY为站点提供服务。 如何修改我的node.js应用程序(使用Express)以使用P

  • 我在AWS ElasticBeanstek上运行laravel应用程序,我使用应用型负载均衡。 当我运行这段代码时,不会显示我的ip,它会显示负载平衡器的ip地址。 那些在cloudflare上使用相同问题的人也有过cloudflare的经验,并且有cloudflare的解决方案,但我找不到AWS应用程序负载平衡器的解决方案。 我在获取用户的ip地址和在维护模式下添加-允许ip时遇到问题。 当我运

  • 我有3个节点kafka集群(zookeeper也安装在相同的3个节点上)。我不确定我是否在我的经纪人面前部署了AWS NLB。我有3个生产者,即使平均分配给所有3个经纪人,他们也会决定在哪里分区等等。我不知道我能从AWS NLB中得到什么好处,也不知道它的缺点是什么。

  • 我想将所有使用超文本传输协议的用户重定向到https。然而,我支持aws云前负载均衡器。 如何确定nodejs中请求的原始客户端协议? 如何重定向用户?这是使用节点的正确方法还是负载均衡器/云前端有其他可能性?

  • 透过nginx/apache代理如何获取客户端真实ip ? 使用nginx/apache作为workerman代理,nginx/apache实际上充当了workerman的客户端,所以在workerman上获取的客户端ip为nginx/apache服务器的ip,并非实际的客户端ip。如何获取客户端真实ip可以参考下面的方法。 原理: nginx/apache将客户端真实ip通过http heade