[英]How to use AWS LoadBalancer ProxyProtocol for AutoScale instances?
我有附加了ELB的AWS AutoScale设置。 通常,部署在AutoScale EC2实例上的API可以成功从Loadbalancer接收请求,并且对客户端的响应也可以。 但是,现在我已经开发了一个新的API,该API需要客户端的IP地址。 在当前设置中,Loadbalancer更改源IP地址。
我已经阅读了该文档http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html,而且我知道代理协议是可能的
我已使用此AWS CLI命令创建了策略
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组自动创建的后端EC2服务器设置此负载均衡器策略? 因此,每当自动伸缩组启动新的EC2实例时,都应为该实例启用proxyProtocol,并且部署在该实例上的API应该获得客户端的原始IP。
应该为该实例启用ProxyProtocol
您所提出的问题的问题在于您没有在“实例”上启用代理协议。
实例上运行的Web服务器软件必须理解代理协议,并且必须将软件配置为使用它。
例如,在Nginx Web服务器中,...
server {
listen 80;
...
...您将使用此...
server {
listen 80 proxy_protocol;
...
...并且$proxy_protocol_addr
内置变量将包含客户端IP,您可以使用该IP设置标头以将地址传递给下游服务。
根据该标准,如果服务期望代理协议前导,则需要拒绝任何不包含该请求的请求。
接收器必须配置为仅接收本规范中描述的协议,并且不得尝试猜测协议头是否存在。
这意味着配置为使用代理协议的兼容服务如果没有它就无法工作,并且配置为不使用代理服务(或未意识到/不兼容)的服务充其量应该视而不见,并且最常见的是,由于有效负载而使其完全失败会出乎意料的。
因此,没有您的堆栈的支持,代理协议将无法为您服务。 实例或任何AWS组件都不会处理它。
另一方面,对于Web服务API,通常不需要。
HTTP模式下的Elastic Load Balancer将向每个请求注入X-Forwarded-For
标头,其中包含客户端的IP地址。 大多数应用程序似乎都使用这种机制。
如果传入请求已经具有这样的标头,则客户端IP地址将附加到末尾,其值以逗号分隔。 当您的代码中找到多个值时,仅应信任最右边的值,而应将最左边的值视为“仅用于信息”-它们可能是准确的,并且可能是伪造的...但是最后一个不能被篡改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.