tencent cloud

Tencent Cloud EdgeOne

方法1:Nginx経由でクライアントの実際のIPを取得する

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-15 16:51:02
AI翻訳

使用シナリオ

元のサーバーサービスがTCPプロトコルであり、現在のNginxがProxy Protocolプロトコルをネイティブでサポートしている場合、クライアントの実際のIPを取得するために、Proxy Protocol V1/V2プロトコルをサポートしているNginxサーバーを業務サーバーの前に追加することをお勧めします。以下の手順を参照して操作できます。
説明:
L4プロキシはエンタープライズ版プランでのみ利用可能です。
現在の元サーバーサービスがTCPプロトコルであり、Nginxサービスをデプロイしてクライアントの実際のIPを個別に解析することを希望せず、業務サーバー内で直接クライアントの実際のIPを解析・取得して業務判断ロジックを補助したい場合は、業務サーバーでのクライアント実際IPの解析を参照できます。

デプロイ方法




上図に示すように、業務サーバーの前にNginxサーバーをデプロイし、NginxサーバーによってProxy Protocolフィールドの終端処理を行う必要があります。実際のクライアントIPアドレスの収集は、Nginxサーバー上でNginxログを分析することで完了できます。業務サーバーは実際のクライアントアドレスを意識する必要はありません。このとき、EdgeOne L4プロキシサービスでオリジンサーバーアドレスを設定する際に、オリジンサーバーアドレスをこのNginxサービスに向けるだけでよいです。

操作手順

ステップ1:Nginxサービスのデプロイ

ご利用になるProxy Protocolプロトコルのバージョンに応じて、対応するNginxバージョンを選択してデプロイしてください:
Proxy Protocol V1をサポート:Nginx Plus R11以降、Nginx Open Source 1.11.4以降。
Proxy Protocol V2をサポート:Nginx Plus R16以降、Nginx Open Source 1.13.11以降。
他のNginxバージョンのProxy Protocolプロトコルへの対応状況を確認する必要がある場合は、Nginxドキュメント:Accepting the PROXY Protocolを参照してください。
Nginx上でL4プロキシサービスを有効にするには、Nginx-1.18.0バージョンとそのstreamモジュールをインストールする必要があります。以下はインストール手順です:
# nginxコンパイル環境の依存関係をインストールします
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

# ソースコードパッケージを解凍します
tar -zxvf nginx-1.18.0.tar.gz
# ディレクトリに入ります
cd nginx-1.18.0
# nginxコンパイルインストール設定を行い、--with-streamを付けます
./configure --prefix=/opt/nginx --sbin-path=/opt/nginx/sbin/nginx --conf-path=/opt/nginx/conf/nginx.conf --with-http_stub_status_module --with-http_gzip_static_module --with-stream
# コンパイル
make
# インストール
make install

ステップ2:Nginx内Streamモジュールの設定

Nginx-1.18.0バージョンを例にすると、以下のコマンドを実行してNginxの設定ファイルnginx.confを開くことができます:
vi /opt/nginx/conf/nginx.conf
Streamモジュールの設定内容は以下の通りです:
stream {
# ログフォーマットを設定します。ここで、proxy_protocol_addrはPPプロトコルを解析して取得したクライアントアドレスであり、remote_addrは前ホップのアドレスです。
log_format basic '$proxy_protocol_addr -$remote_addr [$time_local] '
'$protocol $bytes_sent $bytes_received '
'$session_time';

access_log logs/stream.access.log basic;
# upstream設定
upstream RealServer {
hash $remote_addr consistent;
# ここで、127.0.0.1:8888は業務サーバーのアドレスとポートです。
server 127.0.0.1:8888 max_fails=3 fail_timeout=30s;
}
# server設定
server{
# 四層リスニングポートは、四層プロキシ設定のオリジンサーバーポートに対応しており、proxy_protocolを設定して受信パケットのPPプロトコル解析をサポートする必要があります。
listen 10000 proxy_protocol;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass RealServer;
}
}

ステップ3:レイヤー4プロキシ転送ルールの設定

Nginxサービスの設定が完了したら、コンソールの四層プロキシサービスに移動し、四層プロキシ転送ルールを変更します。オリジンサーバーアドレスを現在のNginxサービスのIPに変更し、オリジンサーバーポートはステップ2で設定した四層リスニングポートにします。クライアントIPを渡す際は、現在使用しているNginxバージョンのサポート状況に応じて、Proxy Protocol V1またはProxy Protocol V2を選択します。




ステップ4:クライアントリクエストをシミュレートし、結果を検証する

TCPサービスを構築し、別のサーバーを使用してクライアントリクエストをシミュレートすることで検証できます。具体的な例は以下の通りです:
1. Pythonを使用して現在のサーバー上にHTTPサービスを作成し、TCPサービスをシミュレートできます。
# python2に基づく
python2 -m SimpleHTTPServer 8888

# python3に基づく
python3 -m http.server 8888
2. 別のサーバーをクライアントとして使用し、クライアントリクエストを構築し、CurlリクエストでTCPリクエストをシミュレートします:
# curlを使用してhttpリクエストを送信します。ここで、ドメイン名は四層プロキシドメイン名であり、8888は四層プロキシ転送ポートです。
curl -i "http://d42f15b7a9b47488.davidjli.xyz.acc.edgeonedy1.com:8888/"
3. Nginxサーバー上でNginxログを確認します。以下に示します:



Nginxサーバー上でパケットキャプチャを実行し、Wiresharkでデータパケットを解析できます。TCPハンドシェイクが完了した後、最初の業務データパケットの前にProxy Protocolフィールドが追加されます。以下はProxy Protocol V1バージョンの例です:①四層プロキシ出口IP、②NginxサーバーIP、③プロトコルバージョン、④実際のクライアントIPアドレス。



ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック