繁体   English   中英

如何将AWS LoadBalancer ProxyProtocol用于AutoScale实例?

[英]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设置标头以将地址传递给下游服务。

根据该标准,如果服务期望代理协议前导,则需要拒绝任何不包含该请求的请求。

接收器必须配置为仅接收本规范中描述的协议,并且不得尝试猜测协议头是否存在。

http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt

这意味着配置为使用代理协议的兼容服务如果没有它就无法工作,并且配置为不使用代理服务(或未意识到/不兼容)的服务充其量应该视而不见,并且最常见的是,由于有效负载而使其完全失败会出乎意料的。

因此,没有您的堆栈的支持,代理协议将无法为您服务。 实例或任何AWS组件都不会处理它。

另一方面,对于Web服务API,通常不需要。

HTTP模式下的Elastic Load Balancer将向每个请求注入X-Forwarded-For标头,其中包含客户端的IP地址。 大多数应用程序似乎都使用这种机制。

如果传入请求已经具有这样的标头,则客户端IP地址将附加到末尾,其值以逗号分隔。 当您的代码中找到多个值时,仅应信任最右边的值,而应将最左边的值视为“仅用于信息”-它们可能是准确的,并且可能是伪造的...但是最后一个不能被篡改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM