設定 Classic Load Balancer 的代理通訊協定 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Classic Load Balancer 的代理通訊協定

Proxy Protocol 是一項網際網路協定請求連線的連線資訊從來源到目的地的連線請求。Elastic Load Balancing 使用 Proxy Protocol 版本 1,該版本使用可供人類讀取的標題格式。

根據預設,當您使用傳輸控制通訊協定 (TCP) 進行前端和後端連線時,Classic Load Balancer 會將請求轉送至執行個體,而不修改請求標頭。如果您啟用 Proxy Protocol,以可供人類讀取的標題新增到請求標題與連線資訊,例如來源 IP 地址、目的地 IP 地址和連接埠號碼。然後標題會做為請求的一部分傳送到執行個體。

注意

AWS Management Console 不支援啟用代理通訊協定。

Proxy Protocol 標題

當您有TCP用於後端連線的負載平衡器時,代理通訊協定標頭可協助您識別用戶端的 IP 地址。因為負載平衡器會攔截用戶端與您的執行個體的流量,所以您的執行個體存取日誌包含負載平衡器的 IP 地址,而不包含來源用戶端。您可以剖析請求中的第一行來擷取您的用戶端 IP 地址和連接埠號碼。

標頭中的代理地址IPv6是負載平衡器的公有IPv6地址。此IPv6地址符合從負載平衡器DNS名稱解析的 IP 地址,其開頭為 ipv6dualstack。如果用戶端與 連線IPv4,則 標頭中的代理地址是負載平衡器的私有IPv4地址,無法透過DNS查詢解決。

Proxy Protocol 列是單一列以換行結束行 ("\r\n"),格式如下:

PROXY_STRING + single space + INET_PROTOCOL + single space + CLIENT_IP + single space + PROXY_IP + single space + CLIENT_PORT + single space + PROXY_PORT + "\r\n"
範例: IPv4

以下是 的代理通訊協定行範例IPv4。

PROXY TCP4 198.51.100.22 203.0.113.7 35646 80\r\n

啟用 Proxy Protocol 先決條件

開始之前,請執行以下動作:

  • 確認您的負載平衡器不在啟用 Proxy Protocol 的代理伺服器後方。如果 Proxy Protocol 啟用於代理伺服器和負載平衡器,負載平衡器新增另一個標題到請求,其從代理伺服器已有標題。根據您的執行個體設定方法,這重複可能會導致錯誤。

  • 確認您的執行個體可以處理 Proxy Protocol 資訊。

  • 確認您的接聽程式設定支援 Proxy Protocol。如需詳細資訊,請參閱Classic Load Balancer 的接聽程式組態

使用 AWS CLI來啟用 Proxy Protocol

若要啟用 Proxy Protocol ,您需要建立 ProxyProtocolPolicyType 類型的政策,然後在執行個體連接埠啟用政策。

請使用下列步驟來建立新的政策,為您的負載平衡器的 ProxyProtocolPolicyType 類型,在連接埠 80 設定新建立的政策到執行個體,和驗證政策已啟用。

為您的負載平衡器啟用 Proxy Protocol
  1. (選用) 使用下列 describe-load-balancer-policy-types 命令來列出 Elastic Load Balancing 支援的政策:

    aws elb describe-load-balancer-policy-types

    回應包含名稱和描述支援的政策類型。以下顯示 ProxyProtocolPolicyType 類型的輸出:

    { "PolicyTypeDescriptions": [ ... { "PolicyAttributeTypeDescriptions": [ { "Cardinality": "ONE", "AttributeName": "ProxyProtocol", "AttributeType": "Boolean" } ], "PolicyTypeName": "ProxyProtocolPolicyType", "Description": "Policy that controls whether to include the IP address and port of the originating request for TCP messages. This policy operates on TCP/SSL listeners only" }, ... ] }
  2. 使用下列create-load-balancer-policy命令來建立啟用代理通訊協定的政策:

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-ProxyProtocol-policy --policy-type-name ProxyProtocolPolicyType --policy-attributes AttributeName=ProxyProtocol,AttributeValue=true
  3. 使用下列 set-load-balancer-policies-for-backend-server 命令,在指定的連接埠上啟用新建立的政策。請注意,這個命令會取代目前組的啟用政策。因此,--policy-names 選項必須指定您要加入清單的政策 (例如,my-ProxyProtocol-policy) 和任何目前啟用政策 (例如,my-existing-policy)。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names my-ProxyProtocol-policy my-existing-policy
  4. (選用) 使用下列describe-load-balancers命令來確認代理通訊協定已啟用:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    回應包含下列資訊,其中說明 my-ProxyProtocol-policy 政策與連接埠 80 相關聯。

    { "LoadBalancerDescriptions": [ { ... "BackendServerDescriptions": [ { "InstancePort": 80, "PolicyNames": [ "my-ProxyProtocol-policy" ] } ], ... } ] }

使用 AWS CLI來停用 Proxy Protocol

您可以停用與執行個體關聯的政策,然後讓他們在稍後時間啟用。

停用 Proxy Protocol 政策
  1. 使用下列 set-load-balancer-policies-for-backend-server 命令,透過從 --policy-names選項中省略代理通訊協定政策,但包含應保持啟用的其他政策 (例如 my-existing-policy),來停用代理通訊協定政策。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names my-existing-policy

    如果沒有啟用其他政策,以 --policy-names 指定空白字串選項,如下所示:

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names "[]"
  2. (選用) 使用下列describe-load-balancers命令來驗證政策是否已停用:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    回應包含下列資訊,其中說明無連接埠與政策相關聯。

    { "LoadBalancerDescriptions": [ { ... "BackendServerDescriptions": [], ... } ] }