スキップしてコンテンツを表示

Elastic Load Balancing を使用してウェブサーバーのログにクライアント IP アドレスをキャプチャする方法を教えてください。

所要時間3分
0

ウェブサーバーに Elastic Load Balancing (ELB) を使用しており、ウェブサーバーのアクセスログにロードバランサーの IP アドレスが表示されています。代わりにクライアント IP アドレスをキャプチャしたいと考えています。

簡単な説明

ロードバランサーがインスタンスへの接続を確立するため、ウェブサーバーのアクセスログにはロードバランサーの IP アドレスが記録されます。ウェブサーバーのアクセスログにクライアントの IP アドレスをキャプチャするには、以下を設定します。

  • Application Load Balancer および HTTP/HTTPS リスナーが設定された Classic Load Balancer の場合は、X-Forwarded-For HTTP ヘッダーを追加してクライアント IP アドレスをキャプチャします。その後、これらの IP アドレスを記録するようにウェブサーバーのアクセスログを設定できます。

    : 場合によっては、X-FORWARDED-FOR ヘッダーがないか、空になることがあります。Application Load Balancer、Classic Load Balancer、Network Load Balancer によって開始されたヘルスチェックリクエストには、X-FORWARDED-FOR ヘッダーは含まれません。また、Network Load Balancer および TCP/SSL リスナーが設定された Classic Load Balancer は、受信リクエストに X-FORWARDED-FOR ヘッダーを追加しません。Application Load Balancer の場合は、Append 処理モードを選択して、X-FORWARDED-FOR ヘッダーを一貫して追加します。

  • TCP/SSL リスナーが設定された Classic Load Balancer の場合は、Classic Load Balancer とターゲットアプリケーションでプロキシプロトコルのサポートを設定します。

  • Network Load Balancer の場合、ターゲットをインスタンス ID で登録すると、ウェブサーバーを追加設定しなくてもクライアント IP アドレスを取得できます。手順については、「Target group attributes」(ターゲットグループ属性) を参照してください。

  • Network Load Balancer の場合、IP アドレスのみをターゲットとして登録できる場合は、ロードバランサーでプロキシプロトコルバージョン 2 を有効にします。手順については、「Proxy protocol」(プロキシプロトコル) を参照してください。

解決策

Application Load Balancer および HTTP/HTTPS リスナーが設定された Classic Load Balancer (Apache)

X-Forwarded-For HTTP ヘッダーを追加し、ウェブサーバーのアクセスログを設定するには、次の手順を実行します。

  1. テキストエディタを使用して Apache 設定ファイルを開きます。場所は構成によって異なります。例えば、Amazon Linux と RHEL の場合は /etc/httpd/conf/httpd.conf、Ubuntu の場合は /etc/apache2/apache2.conf です。

  2. 次の例に示すように、LogFormat セクションに %{X-Forwarded-For}i を追加します。

    ...    LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        LogFormat "%h %l %u %t \"%r\" %>s %b" common
        ...
  3. 変更を保存します。

  4. Apache サービスをリロードします。使用するシステムに応じて、次のコマンドのいずれかを実行します。

    Sysvinit、Debian ベースのシステム (Ubuntu など)、SUSE (SLES11 など)

    # /etc/init.d/apache2 reload

    Sysvinit、RPM ベースのシステム (RHEL 6 や Amazon Linux など)、SUSE を除く

    # /etc/init.d/httpd reload

    Systemd、Debian ベースのシステム (Ubuntu など)、SUSE (SLES12 など)

    # systemctl reload apache2

    RPM ベースのシステム (RHEL 7 や Amazon Linux 2 など)、SUSE を除く

    # systemctl reload httpd
  5. Apache ウェブサーバーのアクセスログを開きます。場所は構成によって異なります。

  6. クライアント IP アドレスが X-Forwarded-For ヘッダーの下に記録されるようになったことを確認します。

Application Load Balancer および HTTP/HTTPS リスナーが設定された Classic Load Balancer (NGINX)

X-Forwarded-For HTTP ヘッダーを追加し、ウェブサーバーのアクセスログを設定するには、次の手順を実行します。

  1. テキストエディタを使用して NGINX 設定ファイルを開きます。通常、この場所は /etc/nginx/nginx.conf です。

  2. 次の例のように、LogFormat セクションに $http_x_forwarded_for を追加します。

    http {    ...
        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. 変更を保存します。

  4. NGINX サービスをリロードします。Amazon Linux 2 または RHEL の場合は、次のコマンドを実行します。

    systemctl reload nginx

    注: NGINX サービスをリロードするコマンドは、他のシステムでは異なります。NGINX をリロードするコマンドは、前のセクションの Apache サービスをリロードするコマンドと似ています。

  5. NGINX ウェブサーバーのアクセスログを開きます。場所は構成によって異なります。

  6. クライアント IP アドレスが X-Forwarded-For ヘッダーの下に記録されるようになったことを確認します。

TCP/SSL リスナーが設定された Classic Load Balancer (Apache)

プロキシプロトコルサポートを設定するには、次の手順を実行します。

  1. テキストエディタを使用して Apache 設定ファイルを開きます。場所は構成によって異なります。例えば、Amazon Linux と RHEL の場合は /etc/httpd/conf/httpd.conf、Ubuntu の場合は /etc/apache2/apache2.conf です。

  2. Apache の設定で mod_remoteip モジュール (Apache バージョン 2.4.31 以降で利用可能) がロードされることを確認します。詳細については、Apache のウェブサイトの「Apache Module mod_remoteip」(Apache モジュール mod_remoteip) を参照してください。このモジュールには RemoteIPProxyProtocol ディレクティブが含まれています。詳細については、Apache のウェブサイトの「RemoteIPProxyProtocol Directive」(RemoteIPProxyProtocol ディレクティブ) を参照してください。設定ファイルで、次のいずれかに似た行がないか確認します。

    ディレクティブ または RHEL

    LoadModule remoteip_module modules/mod_remoteip.so

    Ubuntu

    LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
  3. mod_remoteip モジュールがロードされたことを確認するには、次のコマンドを実行します。

    $ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
  4. 出力を確認し、出力に次のような行が含まれていることを確認します。

    remoteip_module (shared)

    重要: 出力にこの行が含まれていない場合、モジュールは構成に含まれていないか、ロードされていません。先に進む前に、必ずモジュールを有効にしてください。

  5. プロキシプロトコルサポートを有効にするには、Apache 設定ファイルに次の行を追加します。

    RemoteIPProxyProtocol On
  6. 設定ファイルの LogFormat セクションを編集して、リモート IP アドレス (%a) とリモートポート (%{remote}p:) をキャプチャします。

    LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  7. 変更を保存します。

  8. Apache サービスをリロードします。使用するシステムに応じて、次のコマンドのいずれかを実行します。

    Sysvinit、Debian ベースのシステム (Ubuntu など)、SUSE (SLES11 など)

    # /etc/init.d/apache2 reload

    Sysvinit、RPM ベースのシステム (RHEL 6 や Amazon Linux など)、SUSE を除く

    # /etc/init.d/httpd reload

    Systemd、Debian ベースのシステム (Ubuntu など)、SUSE (SLES12 など)

    # systemctl reload apache2

    Systemd、RPM ベースのシステム (RHEL 7 や Amazon Linux 2 など)、SUSE を除く

    # systemctl reload httpd
  9. Apache ウェブサーバーのアクセスログを開きます。場所は構成によって異なります。

  10. クライアント IP アドレスが [プロキシプロトコル] ヘッダーの下に記録されるようになったことを確認します。

  11. ターゲットアプリケーションでプロキシプロトコルのサポートを有効にします。

TCP/SSL リスナーが設定された Classic Load Balancer (NGINX)

プロキシプロトコルサポートを設定するには、次の手順を実行します。

  1. テキストエディタを使用して NGINX 設定ファイルを開きます。通常、この場所は /etc/nginx/nginx.conf です。

  2. server セクションの listen 行を proxy_protocol に更新します。http セクションの log_format 行を更新して、proxy_protocol_addr を設定します。

    http {    ...
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$proxy_protocol_addr"';
    
        access_log  /var/log/nginx/access.log  main;
        ...
    }
    server {
            ...
            listen  80  default_server proxy_protocol;
            ...
            }
    ...
    }
  3. 変更を保存します。

  4. NGINX サービスをリロードします。Amazon Linux 2 または RHEL の場合は、次のコマンドを実行します。

    systemctl reload nginx

    注: NGINX サービスをリロードするコマンドは、他のシステムでは異なります。NGINX をリロードするコマンドは、前のセクションの Apache サービスをリロードするコマンドと似ています。

  5. NGINX ウェブサーバーのアクセスログを開きます。場所は構成によって異なります。

  6. クライアント IP アドレスが [プロキシプロトコル] ヘッダーの下に記録されるようになったことを確認します。

  7. ターゲットアプリケーションでプロキシプロトコルのサポートを有効にします。

AWS公式更新しました 9ヶ月前
1コメント

This article was reviewed and updated on 2025-10-24.

エキスパート

応答済み 1ヶ月前