

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

# 設定 Classic Load Balancer 的代理通訊協定
<a name="enable-proxy-protocol"></a>

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

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

**注意**  
 AWS 管理主控台 不支援啟用代理通訊協定。

**Topics**
+ [Proxy Protocol 標題](#proxy-protocol)
+ [啟用 Proxy Protocol 先決條件](#proxy-protocol-prerequisites)
+ [使用 啟用代理通訊協定 AWS CLI](#enable-proxy-protocol-cli)
+ [使用 停用代理通訊協定 AWS CLI](#proxy-protocol-disable-policy-cli)

## Proxy Protocol 標題
<a name="proxy-protocol"></a>

Proxy Protocol 標題協助您識別用戶端的 IP 地址，當您使用負載平衡器，其使用 TCP 當後端連線。因為負載平衡器會攔截用戶端與您的執行個體的流量，所以您的執行個體存取日誌包含負載平衡器的 IP 地址，而不包含來源用戶端。您可以剖析請求中的第一行來擷取您的用戶端 IP 地址和連接埠號碼。

IPv6 在標題的代理地址是您的負載平衡器的公有 IPv6 地址。此 IPv6 地址符合解決的 IP 地址，從您的負載平衡器的 DNS 名稱，開始使用 `ipv6` 或 `dualstack`。如果用戶端使用 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 Protocol 列範例：

```
PROXY TCP4 198.51.100.22 203.0.113.7 35646 80\r\n
```

## 啟用 Proxy Protocol 先決條件
<a name="proxy-protocol-prerequisites"></a>

開始之前，請執行以下動作：
+ 確認您的負載平衡器不在啟用 Proxy Protocol 的代理伺服器後方。如果 Proxy Protocol 啟用於代理伺服器和負載平衡器，負載平衡器新增另一個標題到請求，其從代理伺服器已有標題。根據您的執行個體設定方法，這重複可能會導致錯誤。
+ 確認您的執行個體可以處理 Proxy Protocol 資訊。
+ 確認您的接聽程式設定支援 Proxy Protocol。如需詳細資訊，請參閱[Classic Load Balancer 的接聽程式組態](using-elb-listenerconfig-quickref.md)。

## 使用 啟用代理通訊協定 AWS CLI
<a name="enable-proxy-protocol-cli"></a>

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

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

**為您的負載平衡器啟用 Proxy Protocol**

1. (選用) 使用以下 [describe-load-balancer-policy-types](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancer-policy-types.html) 命令列出由 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"
           },
           ...
       ]
   }
   ```

1. 使用以下 [create-load-balancer-policy](https://docs.aws.amazon.com/cli/latest/reference/elb/create-load-balancer-policy.html) 命令來建立啟用 Proxy Protocol 的政策：

   ```
   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
   ```

1. 使用以下 [set-load-balancer-policies-for-backend-server](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-for-backend-server.html) 的命令，在指定的連接埠啟用新建立的政策。請注意，這個命令會取代目前組的啟用政策。因此，`--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
   ```

1. (選用) 使用以下 [describe- load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html) 命令來驗證 Proxy Protocol 已啟用：

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

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

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

## 使用 停用代理通訊協定 AWS CLI
<a name="proxy-protocol-disable-policy-cli"></a>

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

**停用 Proxy Protocol 政策**

1. 使用以下 [set-load-balancer-policies-for-backend-server](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-for-backend-server.html) 命令來停用 Proxy Protocol 政策並從 `--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 "[]"
   ```

1. (選用) 使用以下 [describe- load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html) 命令來驗證已停用的政策：

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

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

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