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

Server Load Balancer:Application Load Balancer を介してバックエンドサーバーでクライアントの送信元 IP アドレスを取得

最終更新日:Mar 01, 2026

Application Load Balancer (ALB) がリクエストを転送する際、バックエンドサーバーから見える送信元 IP アドレスは ALB インスタンスの IP アドレスになります。ALB は、クライアントの送信元 IP アドレスを HTTP リクエストヘッダーの X-Forwarded-For フィールドに追加できます。バックエンドサーバーは、簡単な設定でこの IP アドレスを取得できます。

X-Forwarded-For フィールドは次のフォーマットを使用します:

X-Forwarded-For: <クライアントの送信元 IP アドレス, プロキシサーバー 1 の IP, プロキシサーバー 2 の IP, ...>

操作手順

ステップ 1: リスナーが X-Forwarded-For ヘッダーを使用してクライアント IP アドレスを取得するように有効になっていることを確認する

  1. ALB コンソールにログインし、対象インスタンスの ID をクリックして インスタンスの詳細 ページに移動します。

  2. リスナー タブで、対象リスナーの ID をクリックします。リスナーの詳細 ページの 基本情報 セクションで、HTTP ヘッダーの追加[X-Forwarded-For ヘッダーを追加してクライアント IP アドレスを取得 - 追加を有効にする] に設定されていることを確認します。

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

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

Nginx サーバー

このセクションでは、Alibaba Cloud Linux 3.2104nginx/1.20.1 を例として使用します。実際のコマンドとパスは、ご利用の環境によって異なる場合があります。

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

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

    image

    yum や `apt` などのパッケージマネージャーを使用して主要な Linux ディストリビューションにインストールされた 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.2104Apache/2.4.37 を例として使用します。実際のコマンドとパスは、ご利用の環境によって異なる場合があります。

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

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

    image

    yum や `apt` などのパッケージマネージャーを使用して主要な Linux ディストリビューションにインストールされた 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 21H2IIS 10.0 を例として使用します。実際の手順は、ご利用の環境によって異なる場合があります。

  1. IIS マネージャーで、左側の [接続] ペインで対象のサーバーを選択します。次に、メインパネルで [ログ記録] 機能をダブルクリックします。

    image

  2. [ログファイル] セクションで、[フィールドの選択] をクリックします。

    image

  3. [W3C ログ記録フィールド] ダイアログボックスで、[フィールドの追加] をクリックします。[カスタムフィールドの追加] ダイアログボックスで、フィールド情報を設定し、[OK] をクリックします。

    • [フィールド名] には、X-Forwarded-For と入力します。

    • [ソースの種類]:デフォルト値は 要求ヘッダー です。

    • [ソース] には、X-Forwarded-For と入力します。

    image

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

    image

  5. 右側の [操作] ペインで、[適用] をクリックします。

    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 ヘッダーを検証およびフィルタリングして、正当で信頼できるものであることを確認します。X-Forwarded-For ヘッダーのフォーマットと IP アドレスをチェックし、不正または疑わしい値を拒否できます。

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

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

よくある質問

100 で始まる IP アドレスがバックエンドサービスに頻繁にアクセスするのはなぜですか?

  • スペックアップされた ALB インスタンス:vSwitch の CIDR ブロックからのプライベート IP アドレス (ローカル IP) を使用してバックエンドサーバーと通信します。

  • 従来の ALB インスタンス:100.64.0.0/10 のアドレス範囲を使用してバックエンドサーバーと通信します。これは Alibaba Cloud によって予約された CIDR ブロックであり、セキュリティ上のリスクはありません。

ALB はリクエストをバックエンドサーバーに転送するだけでなく、バックエンドサーバーに対してヘルスチェックも実行します。従来の ALB インスタンスを使用している場合、バックエンドサーバーのアクセスログには 100 で始まる IP アドレスからの多くのアクセスリクエストが記録されます。

ALB インスタンスとバックエンドサービス間の正常な通信を確保するため、アクセスパスに Alibaba Cloud セキュリティグループやその他のサードパーティのセキュリティポリシーなどのセキュリティポリシーが設定されている場合は、ALB インスタンスの vSwitch の CIDR ブロックまたは 100.64.0.0/10 のアドレス範囲からのトラフィックを許可する必要があります。

ALB を WAF、CDN、または GA と併用する場合、クライアントの送信元 IP アドレスを取得するにはどうすればよいですか?

トラフィックが ALB インスタンスに到達する前に Alibaba Cloud WAF、CDN、または Global Accelerator (GA) によって転送される場合でも、X-Forwarded-For フィールドからクライアントの送信元 IP アドレスを取得できます。これらのプロダクトはデフォルトでこのフィールドを転送するため、追加の設定は不要です。

X-Forwarded-For のなりすましを防ぐために、他の HTTP リクエストヘッダーフィールドを使用してクライアントの送信元 IP アドレスを記録することもできます:

  • Alibaba Cloud CDN の Ali-Cdn-Real-Ip ヘッダーを使用します。アーキテクチャはクライアント > CDN > WAF > ALB > ECS です。

    1. デフォルトでは、CDN はオリジンフェッチリクエストに Ali-Cdn-Real-Ip リクエストヘッダーを追加して、クライアントの実際の 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 で、値が [システム定義変数][クライアント IP アドレス] に設定されたヘッダーが追加されます。

      写入header

    2. リスナーで [クライアント IP の取得] を有効にし、エンドポイントのパブリック IP アドレス[信頼できる IP リスト] に追加します。

    3. バックエンドの Nginx サーバーでログ変数を $http_client_real_ip として設定します。これにより、このフィールドからクライアントの送信元 IP アドレスを取得できます。

ALB を ACK シナリオで使用する場合、クライアントの送信元 IP アドレスを取得するにはどうすればよいですか?

詳細については、「訪問者の IP アドレスの取得」をご参照ください。