簡體   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