すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:NLB インスタンスを介したクライアント IP アドレスの取得

最終更新日:Jun 23, 2026

Network Load Balancer (NLB) のレイヤー 4 リスナーを使用すると、バックエンドサーバーはクライアント IP アドレスを取得できます。ほとんどの場合、サーバーグループでクライアント IP 保持を有効にすれば十分です。ただし、IPv6 クライアントが IPv4 サービスにアクセスする場合、NLB インスタンスが TCPSSL リスナーを使用する場合、または NLB インスタンスが IP タイプのサーバーグループに関連付けられている場合は、NLB リスナーとバックエンドサーバーの両方で Proxy Protocol を有効にする必要があります。

クライアント IP アドレスの取得方法

获取客户端真实IP

クライアント IP 保持の使用

NLB インスタンスのサーバーグループを作成する際に、[クライアントアドレスの保持] を有効にできます。この機能を有効にすると、バックエンドサーバーは実際のクライアント IP アドレスを送信元 IP アドレスとして受信します。

特定のシナリオでは、クライアント IP 保持は利用できず、代わりに Proxy Protocol を使用する必要があります。詳細については、「Proxy Protocol の使用」をご参照ください。

Proxy Protocol の使用

Proxy Protocol は、クライアントの元の接続情報をプロキシサーバーからバックエンドサーバーに伝達するためのプロトコルです。

Proxy Protocol を使用しない場合、プロキシサーバーはリクエストヘッダー内のクライアントの送信元 IP アドレスとポートを自身のアドレスとポートに置き換えるため、バックエンドサーバーは元の接続情報を確認できません。

Proxy Protocol を使用すると、プロキシサーバーは専用のヘッダーに元の接続情報を付加します。バックエンドサーバーはこのヘッダーを解析して、クライアントの送信元 IP アドレス、送信元ポート、およびトランスポートプロトコルを取得します。

これにより、バックエンドサーバー上での正確なログ記録、アクセス制御、およびトラフィックモニタリングが可能になります。

重要
  • 重要:Proxy Protocol は、プロキシサーバー (この場合は NLB リスナー) とバックエンドサーバーの両方でサポートされている必要があります。この機能を有効にしてもバックエンドサーバーが Proxy Protocol ヘッダーを解析できない場合、リクエストの解析が失敗し、サービス可用性に影響を与える可能性があります。

  • NLB リスナーは Proxy Protocol を使用して、送信元 IP アドレス、宛先 IP アドレス、送信元ポート、宛先ポートなどの元の接続情報を TCP または UDP データヘッダーに追加します。このプロセスでは、既存のデータが破棄されたり上書きされたりすることはありません。

  • NLB は Proxy Protocol v2 のみをサポートします。Proxy Protocol v2 は TCP や UDP などの複数のトランスポートプロトコルをサポートします。詳細については、「The PROXY protocol」をご参照ください。

以下のシナリオでは、NLB リスナーとバックエンドサーバーの両方で Proxy Protocol を有効にする必要があります。

  • IPv6 クライアントがバックエンドサーバー上の IPv4 サービスにアクセスする場合

  • NLB インスタンスが TCPSSL リスナーを使用する場合 (TCPSSL リスナーは、クライアント IP 保持が有効になっているサーバーグループに関連付けることはできません)

  • NLB インスタンスが IP タイプのサーバーグループに関連付けられている場合 (IP タイプのサーバーグループはクライアント IP 保持をサポートしていません)

手順

クライアント IP 保持

前提条件

  • NLB サーバーグループを作成し、そこにバックエンドサーバーを追加済みであること。ここでは、ECS タイプのサーバーグループを例として使用します。バックエンドプロトコルは TCP、バックエンドサーバーとして ECS インスタンスが使用され、バックエンドサーバー上のアプリケーションはポート 80 を使用します。詳細については、「NLB のサーバーグループ」をご参照ください。

ステップ 1: クライアント IP 保持の確認

  1. Network Load Balancer コンソールにログインします。

  2. 上部メニューで、インスタンスがデプロイされているリージョンを選択します。

  3. サーバーグループ ページで、対象のサーバーグループを見つけ、その ID をクリックします。

  4. サーバーグループの詳細ページで、クライアントアドレスの保持 フィールドが 有効 に設定されていることを確認します。無効 になっている場合は、基本情報の変更 をクリックして機能を有効にします。

ステップ 2: クライアント IP 取得の検証

NGINX がバックエンドサーバーとして使用されている場合、NGINX のログを参照して、クライアント IP アドレスが取得されていることを確認できます。

次の例は、NGINX のデフォルトのログフィールド設定を示しています。

http {
  # デフォルト設定
  log_format  main  '$remote_addr- $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	#...
}

NGINX ログファイルのデフォルトパスは /var/log/nginx/access.log です。

各ログエントリの最初の IP アドレスがクライアント IP アドレスです。

140.205.1xxx -- [xxx] xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
140.205.xx.29 -- [27/xxx] xxx xxx xxx xxx xxx xxx 527 xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx
140.205.xx.29 -- [2xxx] xxx xxx 304 xxx xxx xxx xxx xxx

Proxy Protocol

前提条件

  • NLB サーバーグループを作成し、そこにバックエンドサーバーを追加済みであること。ここでは、ECS タイプのサーバーグループを例として使用します。バックエンドプロトコルは TCP、バックエンドサーバーとして ECS インスタンスが使用され、バックエンドサーバー上のアプリケーションはポート 80 を使用します。詳細については、「NLB のサーバーグループ」をご参照ください。

  • NLB インスタンスを作成し、そこにリスナーを追加済みであること。ここでは、ポート 80 の TCP リスナーを例として使用します。詳細については、「NLB インスタンスの作成と管理」をご参照ください。

    説明
    • Proxy Protocol を有効にする前に、バックエンドサーバーが Proxy Protocol v2 をサポートしていることを確認してください。そうでない場合、新しい接続は失敗します。

    • インスタンス上の複数のリスナーが同じサーバーグループに関連付けられている場合は、すべてのリスナーで Proxy Protocol を有効にする必要があります。

    • NGINX Plus R16 以降およびオープンソースの NGINX 1.13.11 以降は Proxy Protocol v2 をサポートしています。

ステップ 1: リスナーでの Proxy Protocol の有効化

  1. Network Load Balancer コンソールにログインします。

  2. 上部メニューで、インスタンスがデプロイされているリージョンを選択します。

  3. インスタンス ページで、対象のインスタンスを見つけ、その ID をクリックします。

  4. インスタンスの詳細 ページで、リスナー タブをクリックし、対象のリスナーを見つけて、リスナー ID をクリックします。

  5. リスナーの詳細 ページで、Proxy Protocol の有効化 フィールドが 有効 に設定されていることを確認します。有効になっていない場合は、リスナーの変更 をクリックして機能を有効にします。

ステップ 2: バックエンドサーバーでの Proxy Protocol の有効化

ここでは、CentOS 7.9 と NGINX 1.20.1 を例として使用します。ご使用の環境によって設定は異なる場合があります。

  1. バックエンドサーバーにログインし、nginx -t コマンドを実行して設定ファイルのパスを確認します。デフォルトのパスは通常 /etc/nginx/nginx.conf ですが、実際のパスは異なる場合があります。

  2. 以下の例のように、設定ファイルを変更して保存し、Proxy Protocol を有効にします。

    http {
      # クライアント IP アドレスを記録するため、$proxy_protocol_addr を設定します。
      log_format  main  '$proxy_protocol_addr - $remote_addr- $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      # ポート 80 のリッスン設定に proxy_protocol パラメーターを追加します。
      server {
        listen 80   proxy_protocol;
        #...
      }
    }
                
  3. sudo nginx -s reload コマンドを実行して NGINX 設定ファイルをリロードします。

ステップ 3: クライアント IP 取得の検証

NGINX がバックエンドサーバーとして使用されている場合、NGINX のログを参照して、クライアント IP アドレスが取得されていることを確認できます。

NGINX ログファイルのデフォルトパスは /var/log/nginx/access.log です。

各ログエントリにおいて、$proxy_protocol_addr 変数の IP アドレスがクライアント IP アドレスです。

140.205.1xxx -- [xxx]
xxx
140.205.xx.29 -- [27/xxx] xxx xxx xxx
xxx
140.205.xx.29 -- [2xxx] 304 xxx xxx xxx
xxx

Proxy Protocol v2 ヘッダーリファレンス

NGINX を使用しない場合は、以下の Proxy Protocol v2 ヘッダー構造と「The PROXY protocol」を参照して、カスタム解析を実装してください。詳細については、ご使用のサーバーの公式ドキュメントをご参照ください。

  • 以下の図は、IPv4 クライアントアドレスを伝送する場合の Proxy Protocol v2 のバイナリヘッダー形式を示しています。IPv4

  • 以下の図は、IPv6 クライアントアドレスを伝送する場合の Proxy Protocol v2 のバイナリヘッダー形式を示しています。IPv6

よくある質問

ACK 環境でのクライアント IP の取得

Container Service for Kubernetes (ACK) クラスターでロードバランサーを使用する場合、メソッドは同じですが、一部の操作の詳細が異なります。詳細については、「ネットワーク管理に関するよくある質問」をご参照ください。

関連ドキュメント

クライアント IP アドレスの取得方法は、ロードバランサーの種類によって異なります。