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

Global Accelerator:クライアント IP アドレスの保持

最終更新日:Jun 21, 2026

Global Accelerator (GA) を使用してアプリケーションサービスを高速化する場合、クライアント IP 保持を有効にすることで、送信元クライアント IP アドレスを取得できます。レイヤー 7 (HTTP/HTTPS) リスナーの場合、HTTP リクエストヘッダーの X-Forwarded-For フィールドからアドレスを取得します。レイヤー 4 (TCP/UDP) リスナーの場合、取得はバックエンドサービスの種類に応じて自動的に行われるか、バックエンドサービスによる Proxy Protocol のサポートを必要とします。

説明

クライアント IP の保持は、スマートルーティングリスナーでのみサポートされています。この機能は、カスタムルーティングリスナーではデフォルトでサポートされていません。カスタムルーティングリスナーでこの機能を有効にするには、アカウントマネージャーにお問い合わせください。

HTTP および HTTPS リスナー

方法

HTTP および HTTPS リスナーの場合、Global Accelerator (GA) は [クライアントの配信元 IP アドレスの保持] 機能を使用して送信元クライアント IP を取得します。この機能はデフォルトで有効です。

GA は、クライアントの送信元 IP アドレスを HTTP リクエストヘッダーの X-Forwarded-For フィールドに保存します。バックエンドサーバーを設定して、この IP アドレスを取得できます。フィールド内の最初の IP アドレスが、クライアントの送信元 IP アドレスです。

X-Forwarded-For: <originating client IP, proxy server 1 IP, proxy server 2 IP, ...>

操作手順

この手順では、Alibaba Cloud Linux 3 で実行されている Nginx 1.20.1 サーバーを例として使用します。手順は環境によって異なる場合があります。

  1. nginx -V | grep http_realip_module コマンドを実行して、Nginx サーバーに http_realip_module モジュールがインストールされているかどうかを確認します。 Nginx はこのモジュールを使用して X-Forwarded-For レコードを解析します。

    出力に --with-http_realip_module が含まれている場合、モジュールはインストールされています。次のステップに進むことができます。

    http_realip_module がインストールされている場合のサンプル出力

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    
    説明
    • http_realip_module は Nginx 1.0.4 (2011 年リリース) 以降でサポートされています。古いバージョンを使用している場合は、設定データをバックアップして Nginx をアップグレードすることを推奨します。

    • http_realip_module がインストールされていない場合は、モジュールを含めて Nginx を再コンパイルしてインストールする必要があります。このプロセスは複雑です。yum などのパッケージマネージャを使用して Nginx をインストールすることを推奨します。

  2. 次の例に示すように Nginx 設定ファイルを変更して保存します。設定ファイルのパスを確認するには、nginx -t コマンドを実行します。デフォルトのパスは通常 /etc/nginx/nginx.conf ですが、お使いの環境によって異なる場合があります。

    http {
      # log_format に $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"';
      
      # ...
    }
    
  3. sudo nginx -s reload コマンドを実行し、Nginx の構成を再読み込みします。

  4. 送信元クライアント IP アドレスを取得します。

    Nginx のアクセスログを確認して、送信元クライアント IP アドレスが正常に取得できていることを検証できます。

    tail -n <number_of_lines> <log_path> コマンドを実行します。返されたログエントリで、$http_x_forwarded_for 変数に対応するフィールドを確認します。最初の IP アドレスが送信元クライアントの IP アドレスです。

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

    [root@izxxx ~]# tail -n 1 /var/log/nginx/access.log
    172.20xxx - - [17/Oct/2024:17:46:49 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0" "47.243.xxx"
    説明

    ヘルスチェックのログが送信元クライアント IP アドレスを含むエントリを上書きしないように、一度に複数のログエントリを表示するか、ヘルスチェック間隔を一時的に長くしてください。

TCP リスナー

方法

送信元クライアント IP アドレスを取得するには、[クライアントの配信元 IP アドレスの保持]機能を有効にして、取得方法を選択します。

サポートされる方法は、バックエンドサービスの種類によって異なります。

  • 自動:Global Accelerator (GA) は送信元クライアント IP アドレスをバックエンドサービスに直接転送します。バックエンドサーバーが取得するクライアント IP アドレスは、送信元クライアント IP アドレスです。

  • Proxy Protocol:バックエンドサーバーは、送信元クライアント IP アドレスを取得するために Proxy Protocol をサポートしている必要があります。

    Proxy Protocol とは

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

    通常、プロキシサーバーがクライアントリクエストを転送する際、リクエストヘッダーを書き換え、クライアントの元の IP アドレスとポートを自身のものに置き換えます。これにより、バックエンドサーバーはクライアントの送信元ネットワーク情報を取得できなくなります。

    Proxy Protocol を使用すると、プロキシサーバーはクライアントの元の接続情報を Proxy Protocol ヘッダー内にカプセル化し、バックエンドサーバーに転送するデータの先頭に付加します。バックエンドサーバーは、このヘッダーを解析することで、送信元 IP アドレス、送信元ポート、プロトコルなどの元の情報を取得できます。

    これにより、バックエンドサーバーは、より正確なログ記録、アクセス制御、トラフィック監視を実行できます。

    重要
    • Proxy Protocol が正しく機能するには、プロキシサーバーとバックエンドサーバーの両方がサポートしている必要があります。バックエンドサーバーが Proxy Protocol を解析できない場合、この機能を有効にすると解析エラーが発生し、サービス可用性に影響を与える可能性があります。

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

    • GA は Proxy Protocol v1 のみをサポートし、これは TCP プロトコルのみをサポートします。詳細については、「PROXY プロトコル」をご参照ください。

Alibaba Cloud バックエンドサービス

バックエンドサービスの種類

クライアント IP の保持のサポート

サポートされる方法

ECS インスタンス

サポート

ECS インスタンスは仮想プライベートクラウド (VPC) 内に存在し、そのセキュリティグループがすべての送信元クライアント IP アドレスからのトラフィックを許可している必要があります。

  • 自動

  • Proxy Protocol

Application Load Balancer (ALB)

サポートなし

該当なし

Network Load Balancer (NLB)

サポート

  • 自動 (NLB インスタンスのバックエンドサーバーが ECS インスタンスまたは ENI の場合のみサポート)

  • Proxy Protocol

Classic Load Balancer (CLB)

サポート

CLB インスタンスのバックエンドサーバーのセキュリティグループは、すべての送信元クライアント IP アドレスからのトラフィックを許可している必要があります。

次のシナリオでは、バックエンドサーバーは送信元クライアント IP アドレスを取得できません。

  • CLB インスタンスのバックエンドサーバーが、クラシックネットワークにデプロイされた ECS インスタンスである場合。

  • CLB インスタンスのリスナーが HTTP または HTTPS プロトコルを使用している場合。

  • 自動 (CLB インスタンスのバックエンドサーバーが ECS インスタンスまたは ENI の場合のみサポート)

  • Proxy Protocol

Object Storage Service (OSS)

サポートなし

該当なし

Elastic Network Interface (ENI)

サポート

ENI のセキュリティグループは、すべての送信元クライアント IP アドレスからのトラフィックを許可している必要があります。

  • 自動

  • Proxy Protocol

[カスタムプライベート IP]

サポート

Proxy Protocol

[Alibaba Cloud インターネット IP アドレス]

警告

エンドポイントが Alibaba Cloud Public IP の場合、パブリック IP を元のインスタンスから切り離して別のインスタンスにアタッチすると、クライアント IP の保持が失敗し、トラフィックが中断される可能性があります。このエンドポイントでこの機能を復元するには、エンドポイントを削除して再作成するか、アカウントマネージャーにお問い合わせください。

VPC タイプの ECS インスタンスにアタッチ

サポート

  • 自動

  • Proxy Protocol

NLB インスタンスにアタッチ

サポート

  • 自動 (NLB インスタンスのバックエンドサーバーが ECS インスタンスまたは ENI の場合のみサポート)

  • Proxy Protocol

ALB インスタンスにアタッチ

サポートなし

該当なし

プライベート CLB インスタンスにアタッチ

サポート

  • 自動 (CLB インスタンスのバックエンドサーバーが ECS インスタンスまたは ENI の場合のみサポート)

  • Proxy Protocol

ENI にアタッチ

サポート

  • 自動

  • Proxy Protocol

パブリック NAT ゲートウェイにアタッチ

サポート

Proxy Protocol

外部バックエンドサービス

バックエンドサービスの種類

クライアント IP の保持のサポート

サポートされる方法

[カスタムパブリック IP]

サポート

Proxy Protocol

[カスタムドメイン名]

サポート

説明

クライアントが IPv6 アクセラレーション IP アドレスを経由して GA にアクセスする場合、または GA がバックエンドサービスと IPv6 で通信する場合は、送信元クライアント IP アドレスを取得するために Proxy Protocol を使用する必要があります。

手順

この手順では、Alibaba Cloud Linux 3 上で実行される Nginx 1.20.1 サーバーを例として使用します。手順は環境によって異なる場合があります。

自動取得

  1. クライアント IP の保持を有効にします。

    1. Global Accelerator (GA) コンソールにログインします。

    2. インスタンス ページで、対象の GA インスタンスを見つけ、リスナーの設定 列の 操作 をクリックします。

    3. リスナー タブで、対象の TCP リスナーを見つけ、リスナーを編集 列の 操作 をクリックします。

    4. リスナーとプロトコルノの設定を行う ページで、次へ をクリックします。

    5. エンドポイントの設定 ページで、維持 ドロップダウンリストから クライアントの配信元 IP アドレスの保持 を選択し、次へ をクリックします。

      バックエンドサービスが Alibaba Cloud にデプロイされている場合、クライアントの実際の IP アドレスの取得 はデフォルトで 自動取得 に設定されています。

      [クライアント IP の保持][保持] に設定します。IPv6 クライアントがバックエンドサービスにアクセスする場合は、[送信元クライアント IP の取得方法] として [Proxy Protocol] を選択します。

    6. 設定監査 ページで、設定を確認し、送信する をクリックします。

  2. Nginx 設定ファイルを確認します。

    nginx -t コマンドを実行して、設定ファイルのパスを見つけます。デフォルトのパスは通常 /etc/nginx/nginx.conf です。

    説明

    HTTP または HTTPS トラフィックを処理するには、Nginx サーバーが http{} モジュールをサポートしている必要があります。TCP トラフィックを処理する場合は、stream{} モジュールもサポートしている必要があります。

    stream{} モジュールは Nginx 1.9.0 で追加されましたが、デフォルトではインストールされていません。 stream{} モジュールを使用するには、コンパイルしてインストールする必要があります。

    # HTTPトラフィックの処理
    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;
      # 例: ポート80でのリスナー
      server {
            listen 80;
            #...
           }
    }
    # TCPトラフィックの処理 (必要に応じて追加)
    stream {
        log_format main_stream '$remote_addr - [$time_local] '
                            '"$protocol" $status $bytes_sent $bytes_received '
                            '"$session_time"';
        access_log  /var/log/nginx/stream_access.log  main_stream;
    # 例: ポート4000でのリスナー
        server {
            listen 4000;
            #...
        }
    }
  3. 送信元クライアント IP アドレスを取得します。

    • 方法 1:Nginx ログを確認して、送信元クライアント IP アドレスを検証します。

      tail -n <行数> <ログパス> コマンドを実行します。返されたログエントリで、$remote_addr 変数に対応する最初の IP アドレスが、送信元クライアント IP アドレスです。

      • HTTP トラフィックの場合:

        この例では、ログファイルパスは /var/log/nginx/access.log です。

        [root@xxx ~]# tail -n 1 /var/log/nginx/access.log
        47.243.xxx.xxx - [21/Oct/2024:14:01:06 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 xxx"
      • TCP トラフィックの場合:

        この例では、ログファイルパスは /var/log/nginx/stream_access.log です。

        [root@iZrxxx      xxx]# tail -n 5 /var/log/nginx/stream_access.log
        121.40.xxx.xxx [24/Jan/2025:10:29:34 +0800] "TCP" 200 0 16 "3.217"
        121.40.xxx.xxx [24/Jan/2025:10:29:44 +0800] "TCP" 200 0 15 "2.935"
        121.40.xxx.xxx [24/Jan/2025:10:29:57 +0800] "TCP" 200 0 7 "4.908"
        121.40.xxx.xxx [24/Jan/2025:10:30:16 +0800] "TCP" 200 0 26 "10.474"
        121.40.xxx.xxx [24/Jan/2025:10:30:25 +0800] "TCP" 200 0 10 "3.368"
    • 方法 2:データパケットをキャプチャして、送信元クライアント IP アドレスを検証します。

      tcpdump tcp port [リスナーポート] -n -X -s 0 コマンドを実行して、データパケット内の送信元クライアント IP アドレスを確認します。

      [root@iZrxxx ~]# tcpdump tcp port 4000 -n -X -s 0
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      10:31:59.216390 IP 121.40.xxx.xxx.52352 > 172.20.106.148.terabase: Flags [S], seq 3468880686, win 65535, options [nop,nop,nop,nop,nop,nop,nop,nop,mss 1460,sackOK,TS val 1793314199 ecr 0,nop,wscale 9], length 0
              0x0000:  4500 0044 801a 4000 4006 36a9 7928 f41f  E..D..@.@.6.y(..
              0x0010:  ac14 6a94 cc80 0fa0 cec2 eb2e 0000 0000  ..j.............
              0x0020:  c002 ffff d173 0000 0101 0101 0101 0101  .....s..........
              0x0030:  0204 05b4 0402 080a 6ae3 cd97 0000 0000  ........j.......
              0x0040:  0103 0309                                 ....
      10:31:59.216419 IP 172.20.106.148.terabase > 121.40.xxx.xxx.52352: Flags [S.], seq 28697778872, ack 3468880687, win 65160, options [mss 1460,sackOK,TS val 1603313796 ecr 1793314199,nop,wscale 7], length 0
              0x0000:  4500 003c 0000 4000 4006 b6cb ac14 6a94  E..<..@.@.....j.
              0x0010:  7928 f41f 0fa0 cc80 ab0d 59b8 cec2 eb2f  y(........Y..../
              0x0020:  a012 fe88 841f 0000 0204 05b4 0402 080a  ................
              0x0030:  5f90 a084 6ae3 cd97 0103 0307             _...j.......

Proxy Protocol

  1. クライアント IP の保持を有効にします。

    1. Global Accelerator (GA) コンソールにログインします。

    2. インスタンス ページで、対象の GA インスタンスを見つけ、リスナーの設定 列の 操作 をクリックします。

    3. リスナー タブで、対象の TCP リスナーを見つけ、リスナーを編集 列の 操作 をクリックします。

    4. リスナーとプロトコルノの設定を行う ページで、次へ をクリックします。

    5. エンドポイントの設定 ページで、維持 ドロップダウンリストから クライアントの配信元 IP アドレスの保持 を選択し、次へ をクリックします。

      バックエンドサービスが Alibaba Cloud 外にデプロイされている場合、クライアントの実際の IP アドレスの取得 はデフォルトで [Proxy Protocol] に設定されています。

      [エンドポイントグループの設定] ページで、[クライアント IP の保持][保持] に設定します。

    6. 設定監査 ページで、設定を確認し、送信する をクリックします。

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

    nginx -t コマンドを実行して、設定ファイルのパスを見つけます。デフォルトのパスは通常 /etc/nginx/nginx.conf ですが、実際のパスは環境によって異なります。

    説明

    HTTP または HTTPS トラフィックを処理するには、Nginx サーバーが http{} モジュールをサポートしている必要があります。TCP トラフィックを処理する場合は、stream{} モジュールもサポートしている必要があります。

    stream{} モジュールは Nginx 1.9.0 で追加されましたが、デフォルトではインストールされていません。 stream{} モジュールを使用するには、コンパイルしてインストールする必要があります。

    # HTTPトラフィックの処理
    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"';     
      access_log  /var/log/nginx/access.log  main;
      # リスナーポート (この例ではポート 80) で proxy_protocol 解析を有効にします。
      server {
        listen 80   proxy_protocol;
        #...
      }
    }
    # TCPトラフィックの処理 (必要に応じて追加)
    stream {
        # 送信元クライアント IP を記録するために、ログフォーマットに $proxy_protocol_addr 変数を追加します。
        log_format  main_stream  '$proxy_protocol_addr - $remote_addr - $protocol [$time_local] '
                                  '$status $bytes_sent $bytes_received $session_time';
        access_log /var/log/nginx/stream_access.log main_stream; 
       # リスナーポート (この例ではポート 12345) で proxy_protocol 解析を有効にします。
        server {
            listen 12345 proxy_protocol;
            #...
        }
    }
  3. sudo nginx -s reload コマンドを実行して、Nginx 設定ファイルを再読み込みします。

  4. 送信元クライアント IP アドレスを取得します。

    Nginx ログを確認して、送信元クライアント IP アドレスを検証できます。

    tail -n <行数> <ログパス> コマンドを実行します。返されたログエントリで、$proxy_protocol_addr 変数に対応する IP アドレスが、送信元クライアント IP アドレスです。

    • HTTP トラフィックの場合:

      この例では、ログファイルパスは /var/log/nginx/access.log です。

      [root@xxx    ~]#  tail -n 1 /var/log/nginx/access.log
      47.243.xxx.xxx  - 47.251.xxx.xxx - - [21/Oct/2024:16:57:41 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0"
    • TCP トラフィックの場合:

      この例では、ログファイルパスは /var/log/nginx/stream_access.log です。

      [root@i-xxx ~]# tail -n 1 /var/log/nginx/stream_access.log
      47.243.xxx.xxx   47.251.xxx.xxx    - TCP [23/Oct/2024:17:19:44 +0800] 200 0 1 0.000

UDP リスナー

方法

送信元クライアント IP アドレスを取得するには、[クライアントの配信元 IP アドレスの保持]機能を有効にします。UDP リスナーの場合、この機能は[自動取得]方法のみをサポートしており、GA は送信元クライアント IP アドレスをバックエンドサービスに直接転送します。

UDP リスナーで[クライアントの配信元 IP アドレスの保持]を有効にする場合、次の制限事項があります。

  • 従量課金の GA インスタンスのみがサポートされています。

    従量課金の GA インスタンスで UDP リスナーの[クライアント IP の保持]を有効にできない場合、インスタンスのバージョンがこの機能をサポートしていない可能性があります。この機能を使用するには、アカウントマネージャーにお問い合わせの上、インスタンスのアップグレードをリクエストしてください。

  • これは、バックエンドサービスタイプ [ECS] [ENI] 、または [NLB] の場合にのみサポートされます。NLB タイプのバックエンドサービスの場合、クライアントの配信元 IP アドレスの保持 機能はデフォルトでは有効になっていません。この機能を使用するには、アカウントマネージャーにお問い合わせください。

  • バックエンドサーバー は、同じ IP バージョンのクライアント (IPv4 から IPv4、IPv6 から IPv6) からの送信元 IP アドレスのみを取得できます。

手順

この手順では、Alibaba Cloud Linux 3 上で実行される Nginx 1.20.1 サーバーを例に説明します。手順は環境によって異なる場合があります。

  1. クライアント IP の保持を有効にします。

    1. Global Accelerator (GA) コンソールにログインします。

    2. インスタンス ページで、対象の GA インスタンスを見つけ、リスナーの設定 列の 操作 をクリックします。

    3. リスナー タブで、目的の UDP リスナーを見つけ、操作 列の リスナーを編集 をクリックします。

    4. リスナーとプロトコルノの設定を行う ページで、次へ をクリックします。

    5. エンドポイントの設定 ページで、クライアントの配信元 IP アドレスの保持 ドロップダウンリストから 維持 を選択し、次へ をクリックします。

      クライアントの実際の IP アドレスの取得 は、デフォルトで [自動] に設定されています。

    6. 設定監査 ページで、設定を確認し、送信する をクリックします。

  2. Nginx 設定ファイルを確認します。

    nginx -t コマンドを実行して、設定ファイルのパスを確認します。デフォルトのパスは通常 /etc/nginx/nginx.conf です。

    説明

    UDP トラフィックを処理するには、Nginx サーバーで stream{} モジュールがサポートされている必要があります。

    stream{} モジュールは Nginx 1.9.0 で追加されましたが、デフォルトではインストールされません。stream{} モジュールを使用するには、コンパイルしてインストールする必要があります。

    #...
    # UDP トラフィックの処理 (このモジュールを必ず含めてください)
    stream {
        log_format main_stream '$remote_addr - [$time_local] '
                            '"$protocol" $status $bytes_sent $bytes_received '
                            '"$session_time"';
        access_log  /var/log/nginx/stream_access.log  main_stream;
    # 例: ポート 4000 での UDP リスナー
        server {
            listen 4000 udp;
            #...
        }
    }
  3. 送信元クライアント IP アドレスを取得します。

    • 方法 1:Nginx ログを確認して、送信元クライアント IP アドレスを検証します。

      tail -n <行数> <ログパス> コマンドを実行します。返されたログエントリで、$remote_addr 変数に対応する最初の IP アドレスが、送信元クライアント IP アドレスです。

      この例では、ログファイルパスは /var/log/nginx/stream_access.log です。

      [root@iZ2zxxx          ~]# tail -n 5 /var/log/nginx/stream_access.log
      47.251.xxx.xxx - [24/Jan/2025:13:37:43 +0800] "UDP" 200 0 12 "600.099"
      47.251.xxx.xxx - [24/Jan/2025:13:39:11 +0800] "UDP" 200 0 12 "600.088"
      47.251.xxx.xxx - [24/Jan/2025:13:39:28 +0800] "UDP" 200 0 14 "600.012"
      47.251.xxx.xxx - [24/Jan/2025:13:39:37 +0800] "UDP" 200 0 14 "600.009"
      47.251.xxx.xxx - [24/Jan/2025:13:41:04 +0800] "UDP" 200 0 14 "600.086"
    • 方法 2:データパケットをキャプチャして、送信元クライアント IP アドレスを検証します。

      tcpdump udp port [listener_port] -n -X -s 0 コマンドを実行して、データパケット内の送信元クライアント IP アドレスを確認します。

      [root@iz2xxx ~]# tcpdump udp port 4000 -n -X -s 0
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      14:04:06.047337 IP 47.251.xxx.xxx 55491 > 10.5.120.213.terabase: UDP, length 14
      0x0000: 4500 002a 6e1e 4000 4011 a221 2ffb 77ae  E..*n.@.@..!/w.
      0x0010: 0a05 78d5 d8c3 0fa0 0016 12fb 4865 6c6c  ..x.........Hell
      0x0020: 6f2c 2055 4450 3032 210a                  o, UDP02!.

よくある質問

クライアント IP の保持に関するトラブルシューティング

  • HTTP または HTTPS リスナーの場合、バックエンドサーバーが X-Forwarded-For ヘッダーを記録または処理できないと、クライアント IP アドレスの保持は機能しません。

  • TCP リスナーの場合:

    • バックエンドサービスが Alibaba Cloud 上にデプロイされている場合、バックエンドインスタンス、または Elastic IP アドレス (EIP) に関連付けられたインスタンスが VPC 内にないと、クライアント IP アドレスの保持は機能しません。

    • バックエンドサービスが Alibaba Cloud の外部にデプロイされている場合、クライアント IP アドレスを取得するには、バックエンドサーバーが Proxy Protocol をサポートしている必要があります。そうでない場合、この機能は動作しません。

      クライアント IP アドレスの保持が有効になっている場合、GA は Proxy Protocol を使用してクライアント IP アドレスを転送します。バックエンドサーバーが Proxy Protocol をサポートしていない場合、アクセラレーションされたトラフィックを正しく解析できません。

    • IPv6 クライアントが IPv4 バックエンドサービスにアクセスする場合、クライアント IP アドレスを取得するにはバックエンドサーバーが Proxy Protocol をサポートする必要があります。そうでない場合、この機能は動作しません。

  • UDP リスナーの場合、IPv6 クライアントが IPv4 バックエンドサービスにアクセスすると、クライアント IP アドレスの保持は機能しません。

クライアント IP アドレスの保持の無効化

HTTP および HTTPS リスナーの場合、クライアント IP アドレスの保持はデフォルトで有効になっており、無効にすることはできません。

TCP および UDP リスナーの場合、コンソールで次の手順に従ってこの機能を無効にできます。

  1. インスタンスページで、対象の GA インスタンスを見つけ、操作 列の リスナーの設定 をクリックします。

  2. リスナー タブで、対象のリスナーを見つけ、操作 列の 編集 をクリックします。

  3. リスナーとプロトコルノの設定を行う の手順で、次へ をクリックします。

  4. エンドポイントの設定 の手順で、クライアント IP の保持維持しない に設定し、次へ をクリックします。

  5. 設定監査 の手順で、設定内容を確認し、送信する をクリックします。

IPv6-to-IPv4 変換におけるクライアント IP の取得

  • HTTP または HTTPS リスナーの場合、IPv4 と IPv6 両方のクライアントの IP アドレスは、HTTP リクエストヘッダーの X-Forwarded-For フィールドからのみ取得できます。

  • TCP リスナーの場合、IPv6 クライアントの IP アドレスの取得では、[Proxy Protocol] のみがサポートされています。この方法でクライアント IP アドレスを取得するには、バックエンドサーバーが [Proxy Protocol] をサポートしている必要があります。そうでない場合、アクセスに失敗する可能性があります。

  • UDP リスナーの場合、IPv6 クライアントの IP アドレスの取得はサポートされていません。

関連ドキュメント

コンソール

API

これらの API を呼び出す際は、自動方式には EnableClientIPPreservation パラメーターを、Proxy Protocol 方式には EnableProxyProtocol パラメーターを使用します。