

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Classic Load Balancer のプロキシプロトコルを設定する
<a name="enable-proxy-protocol"></a>

プロキシプロトコルは、接続をリクエストする送信元から接続がリクエストされる送信先に接続情報を伝達するために使用される、インターネットプロトコルです。Elastic Load Balancing のプロキシプロトコルでは、人間にとって可読性があるヘッダー形式を持つバージョン 1 を使用しています。

デフォルトでは、フロントエンド接続とバックエンド接続の両方で Transmission Control Protocol (TCP) を使用した場合に、Classic Load Balancer がインスタンスにリクエストを転送する際、そのリクエストヘッダーは変更されません。プロキシプロトコルを有効にすると、送信元 IP アドレス、送信先 IP アドレス、ポート番号などの接続情報を含むリクエストヘッダーに、人間が判読できるヘッダーが追加されます。これにより、ヘッダーがリクエストの一部としてインスタンスに送信されます。

**注記**  
 AWS マネジメントコンソール はプロキシプロトコルの有効化をサポートしていません。

**Topics**
+ [

## プロキシプロトコルヘッダー
](#proxy-protocol)
+ [

## プロキシプロトコルを有効にするための前提条件
](#proxy-protocol-prerequisites)
+ [

## を使用してプロキシプロトコルを有効にする AWS CLI
](#enable-proxy-protocol-cli)
+ [

## を使用してプロキシプロトコルを無効にする AWS CLI
](#proxy-protocol-disable-policy-cli)

## プロキシプロトコルヘッダー
<a name="proxy-protocol"></a>

プロキシプロトコルヘッダーは、ロードバランサーでバックエンド接続用に TCP を使用する場合に、クライアントの IP アドレスを識別するのに役立ちます。ロードバランサーはクライアントとインスタンスの間のトラフィックを傍受するため、インスタンス内のアクセスログには、発信元クライアントの IP アドレスでなく、ロードバランサーの IP アドレスが含まれています。リクエストの 1 行めを解析して、クライアントの IP アドレスとポート番号を取得することができます。

IPv6 のヘッダー内のプロキシのアドレスは、ロードバランサーのパブリック IPv6 アドレスです。この IPv6 アドレスは、`ipv6` または `dualstack` で始まるロードバランサーの DNS 名から解決される IP アドレスと一致します。クライアントが IPv4 に接続する場合、ヘッダー内のプロキシのアドレスはロードバランサーのプライベート IPv4 アドレスであるため、DNS ルックアップでは解決できません。

プロキシプロトコルの行は 1 行であり、キャリッジリターンとラインフィード (`"\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
```

## プロキシプロトコルを有効にするための前提条件
<a name="proxy-protocol-prerequisites"></a>

開始する前に、以下を実行します:
+ ロードバランサーが、プロキシプロトコルが有効になっているプロキシサーバーの背後にないことを確認します。プロキシプロトコルがプロキシサーバーとロードバランサーの両方で有効になっていると、ロードバランサーは、プロキシサーバーからのヘッダーが既に追加されているリクエストに別のヘッダーを追加します。インスタンスの設定によっては、このような重複によってエラーが発生する可能性があります。
+ インスタンスでプロキシプロトコル情報を処理できることを確認します。
+ リスナー設定でプロキシプロトコルがサポートされることを確認します。詳細については、「[Classic Load Balancer のリスナー設定](using-elb-listenerconfig-quickref.md)」を参照してください。

## を使用してプロキシプロトコルを有効にする AWS CLI
<a name="enable-proxy-protocol-cli"></a>

プロキシプロトコルを有効にするには、タイプ `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) コマンドを使用して、プロキシプロトコルを有効にするポリシーを作成します。

   ```
   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) コマンドを使用して、プロキシプロトコルが有効になっていることを確認します。

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

インスタンスに関連付けられているポリシーは無効にすることができ、また後で有効にすることができます。

**プロキシプロトコルをポリシーを無効にするには**

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-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": [],
               ...
           }
       ]
   }
   ```