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

Server Load Balancer:バックエンドサーバーでのクライアント IP の取得

最終更新日:May 30, 2026

ALB がリクエストを転送する際、バックエンドサーバーで認識されるソース IP アドレスは ALB インスタンスの IP アドレスです。ALB は HTTP ヘッダーの X-Forwarded-For フィールドにリアルクライアント IP を追加できます。バックエンドサーバー側で簡単な設定を行うことで、この情報を取得できます。

X-Forwarded-For フィールドの形式は次のとおりです:

X-Forwarded-For: <リアルクライアント IP, プロキシサーバー 1-IP, プロキシサーバー 2-IP, ...>

手順

ステップ 1: X-Forwarded-For のリスナー設定の確認

  1. ALB コンソールにログオンし、対象のインスタンス ID をクリックすると、インスタンスの詳細 ページが表示されます。

  2. リスナー タブで、ターゲットリスナーの ID をクリックします。リスナーの詳細 ページの 基本情報 セクションで、HTTP ヘッダーの追加X-Forwarded-For を含むように設定されていることを確認します。

    このオプションはデフォルトで有効になっています。有効になっていない場合は、基本情報 セクションで リスナーの変更 をクリックし、詳細設定 セクションで有効にします。

ステップ 2: バックエンドサーバーの設定

Nginx サーバー

このトピックでは、Alibaba Cloud Linux 3.2104 および nginx/1.20.1 を実行する Nginx サーバーを例に説明します。実際の設定は環境によって異なる場合があります。

Nginx は http_realip_module モジュールを使用して X-Forwarded-For ヘッダーを解析し、リアルクライアント IP を取得します。

  1. モジュールがインストールされていることを確認します: サーバーで nginx -V 2>&1 | grep --color=auto http_realip_module コマンドを実行します。出力に --with-http_realip_module が含まれている場合、モジュールはインストールされています。

    image

    主要な Linux ディストリビューションでは、yumapt などのパッケージマネージャーを使用してインストールした Nginx には、通常このモジュールがデフォルトで含まれています。モジュールがインストールされていない場合は、パッケージマネージャーを使用して Nginx をインストールまたはアップグレードすることを推奨します。
  2. Nginx 設定ファイルの変更sudo nginx -t を実行して、設定ファイルのパスを見つけます。デフォルトのパスは、通常 /etc/nginx/nginx.conf です。

    http {
        # ログフォーマットに $http_x_forwarded_for を追加し、X-Forwarded-For ヘッダーの値を記録します。
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';    
        # アクセスログが上記のフォーマットを使用するように設定します。             
        access_log  /var/log/nginx/access.log  main;
        #  ...
    }
  3. 設定の再読み込み: sudo nginx -t を実行して設定構文を確認します。 構文が正しい場合は、sudo nginx -s reload を実行して変更を適用します。

Apache サーバー

このトピックでは、Alibaba Cloud Linux 3.2104 および Apache/2.4.37 を実行する Apache サーバーを例に説明します。実際の設定は環境によって異なる場合があります。

Apache は mod_remoteip モジュールを使用して X-Forwarded-For ヘッダーを解析し、リアルクライアント IP を取得します。

  1. モジュールのインストール確認:サーバーで httpd -M | grep remoteip_module コマンドを実行します。 出力に remoteip_module (shared) が含まれている場合、モジュールはインストールされています。

    image

    主要な Linux ディストリビューションでは、yumapt などのパッケージマネージャーを使用してインストールした Apache には、通常このモジュールがデフォルトで含まれています。モジュールがインストールされていない場合は、パッケージマネージャーを使用して Apache をインストールまたはアップグレードすることを推奨します。
  2. Apache 設定ファイルの変更: httpd -V を実行して設定ファイルのパスを確認します。デフォルトのパスは通常 /etc/httpd/conf/httpd.conf です。

    # ...
    <IfModule log_config_module>
    # ...
    # ログフォーマットに %{X-Forwarded-For}i を追加し、X-Forwarded-For ヘッダーの値を記録します。
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
    # ...
    # アクセスログが上記のフォーマットを使用するように設定します。
    CustomLog "logs/access_log" combined
    </IfModule>
    # ...
  3. 設定の再読み込み:変更を適用するには、sudo systemctl restart httpd を実行します。

IIS サーバー

このトピックでは、Windows Server 2022 21H2 および IIS 10.0 を実行する IIS サーバーを例に説明します。実際の設定は環境によって異なる場合があります。

  1. IIS マネージャーの [Connections] ペインで対象のサーバーを選択します。メインペインで [Logging] をダブルクリックします。

    image

  2. [Log File] セクションで [Select Fields] をクリックします。

    image

  3. [W3C Logging Fields] ダイアログボックスで [Add Field] をクリックします。[Add Custom Field] ダイアログボックスでフィールド情報を設定し、[OK] をクリックします。

    • フィールド名: X-Forwarded-For を入力します。

    • ソースタイプ: デフォルト値 (Request Header) のままにします。

    • ソース: X-Forwarded-For を入力します。

    image

  4. カスタムフィールドが追加されたことを確認し、[OK] をクリックします。

    image

  5. 右側の [Actions] ペインで [Apply] をクリックして変更を保存します。

    image

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

バックエンド Web サーバーのアクセスログで、リアルクライアント IP が取得されていることを確認します。

Nginx サーバー

Nginx アクセスログのデフォルトパスは /var/log/nginx/access.log です。

各ログエントリにおいて、$http_x_forwarded_for 変数の値がリアルクライアント IP です。

image

Apache サーバー

Apache アクセスログのデフォルトパスは /var/log/httpd/access_log です。

各ログエントリにおいて、%{X-Forwarded-For}i 変数の値がリアルクライアント IP です。

image

IIS サーバー

IIS アクセスログのデフォルトパスは %SystemDrive%\inetpub\logs\LogFiles です。

各ログエントリにおいて、最後の X-Forwarded-For フィールドの値がリアルクライアント IP です。

image

本番環境のベストプラクティス

  • X-Forwarded-For ヘッダーを検証してフィルタリングする: バックエンドサーバー上で X-Forwarded-For ヘッダーを検証してフィルタリングします。不適切な形式のエントリや信頼できない IP アドレスを含むエントリを拒否します。

  • セキュリティポリシーを使用する: ALB とバックエンドサーバー間でセキュリティグループまたはその他のサードパーティセキュリティポリシーを使用して、偽装された X-Forwarded-For ヘッダーを持つ悪意のあるリクエストを制限およびフィルタリングします。

  • TLS 暗号化: TLS 暗号化を使用して、X-Forwarded-For ヘッダーの送信を含むコンポーネント間の通信を保護します。これにより、中間者攻撃やデータ改ざんのリスクが軽減されます。

よくある質問

100 で始まる IP からの頻繁なアクセス

  • アップグレード済みの ALB インスタンスは、関連する vSwitch CIDR ブロックからのプライベート IP アドレス (ローカル IP) を使用してバックエンドサーバーと通信します。

  • アップグレードされていない ALB インスタンスは、バックエンドサーバーとの通信に、Alibaba Cloud が予約しているセキュリティリスクのないアドレス範囲 100.64.0.0/10 を使用します。

ALB は、バックエンドサーバーへのリクエスト転送に加えて、継続的なヘルスチェックも実行します。アップグレードされていない ALB インスタンスを使用している場合、バックエンドサーバーのアクセスログには 100.64.0.0/10 範囲の IP アドレスからの多数のリクエストが記録されます。

ALB インスタンスとバックエンドサービス間の適切な接続を確保するために、バックエンド ECS インスタンス上の iptables またはその他のサードパーティセキュリティソフトウェアが ALB インスタンスの vSwitch CIDR ブロックまたは 100.64.0.0/10 アドレス範囲をブロックしていないことを確認してください。

WAF、CDN、または GA を使用したクライアント IP の取得

Web Application Firewall (WAF)、Content Delivery Network (CDN)、Global Accelerator (GA) などのサービスによってトラフィックが転送されてから ALB に到達する場合でも、X-Forwarded-For フィールドからリアルクライアント IP を取得できます。これらの製品はデフォルトでこのヘッダーを転送するため、追加の設定は不要です。

X-Forwarded-For の偽装を防ぐために、他の HTTP ヘッダーを使用してリアルクライアント IP を記録できます。

  • Alibaba Cloud CDN の Ali-Cdn-Real-Ip ヘッダーの使用。アーキテクチャは Client > CDN > WAF > ALB > ECS です。

    1. デフォルトでは、CDN はオリジンサーバーに転送されるリクエストに Ali-Cdn-Real-Ip リクエストヘッダーを追加します。このヘッダーには、CDN の Point of Presence (POP) に接続したクライアントのリアル IP アドレスが格納されます。

    2. WAF と統合する際は、クライアント IP 検出用のカスタムヘッダーとして Ali-Cdn-Real-Ip を選択します。

    3. バックエンド Nginx サーバー上で $http_Ali_Cdn_Real_Ip ログ変数を設定して、このフィールドからリアルクライアント IP を取得します。

  • ALB リスナーの転送ルールで ヘッダーの追加 アクションを使用すると、リクエストに HTTP ヘッダー (キーと値のペア) を追加できます。アーキテクチャはクライアント > GA > ALB > ECS です。

    1. ALB リスナーの転送ルールで、転送操作ヘッダーの追加 に設定します。この例では、キーは client-real-ip で、値は System-defined - Client IP Address に設定されています。

      写入header

    2. リスナーについては、実際のクライアントソース IP を見つけるを有効にし、GA エンドポイントのパブリック Egress IP アドレスを信頼できる IP アドレスリストに追加します。

    3. バックエンド Nginx サーバー上で $http_client_real_ip ログ変数を設定して、このフィールドからリアルクライアント IP を取得します。

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

詳細については、「AlbConfig を使用した ALB インスタンスの設定」をご参照ください。