Amazon web services 如何将AWS LoadBalancer ProxyProtocol用于自动缩放实例?
我已经安装了带有ELB的AWS自动缩放设置。通常,部署在AutoScale的EC2实例上的API成功地从Loadbalancer获取请求,并且对客户端的响应正常。然而,现在我开发了一个新的API,它需要客户端的IP地址。在当前设置中,Loadbalancer更改源IP地址 我已经阅读了本文档,我知道使用代理协议是可能的 我已使用此AWS CLI命令创建了策略Amazon web services 如何将AWS LoadBalancer ProxyProtocol用于自动缩放实例?,amazon-web-services,amazon-ec2,load-balancing,Amazon Web Services,Amazon Ec2,Load Balancing,我已经安装了带有ELB的AWS自动缩放设置。通常,部署在AutoScale的EC2实例上的API成功地从Loadbalancer获取请求,并且对客户端的响应正常。然而,现在我开发了一个新的API,它需要客户端的IP地址。在当前设置中,Loadbalancer更改源IP地址 我已经阅读了本文档,我知道使用代理协议是可能的 我已使用此AWS CLI命令创建了策略 aws elb create-load-balancer-policy --load-balancer-name LB-autoscale
aws elb create-load-balancer-policy --load-balancer-name LB-autoscale --policy-name my-ProxyProtocol-policy --policy-type-name ProxyProtocolPolicyType --policy-attributes AttributeName=ProxyProtocol,AttributeValue=true
问题:如何为AutoScale group自动创建的后端EC2服务器设置此负载平衡器策略?因此,每当autoscale group启动一个新的EC2实例时,应该为该实例启用proxyProtocol,并且部署在该实例上的API应该获得客户端的原始IP
应为该实例启用ProxyProtocol
您提出的问题的问题是,您没有“在实例上”启用代理协议
实例上运行的web服务器软件必须理解代理协议,并且必须对软件进行配置以使用代理协议
例如,在nginx web服务器中,而不是此
server {
listen 80;
...
…你会用这个
server {
listen 80 proxy_protocol;
...
…而$proxy\u protocol\u addr
内置变量将包含客户端IP,您可以使用该IP设置一个头,将地址传递给下游服务
根据该标准,如果服务需要代理协议前导,则需要拒绝不包含该前导的任何请求
接收器必须配置为仅接收本节中描述的协议
并且不能试图猜测协议头是否存在
或者不是
这意味着配置为使用代理协议的兼容服务在没有代理协议的情况下无法工作,而配置为不使用代理协议(或不知道代理协议/不兼容)的服务最多应该忽略代理协议,最常见的情况是完全失败,因为负载是意外的
因此,如果没有堆栈的支持,代理协议将无法为您工作。实例或任何AWS组件都不会处理它
另一方面,对于web服务API,通常不需要它
HTTP模式下的弹性负载平衡器将向每个请求中注入一个X-Forwarded-For
头,其中包含客户端的IP地址。大多数应用程序似乎都使用这种机制
如果传入的请求已经有这样的头,那么客户端IP地址将被追加到末尾,并用逗号分隔。当代码找到多个值时,只有最右边的值才可信,左边的值应被视为“仅供参考”——它们可能是准确的,也可能是伪造的。。。但最后一个是不能篡改的