Global Accelerator (GA) は、Proxy プロトコルをサポートしています。 このトピックでは、Proxy プロトコルを使用してクライアントの送信元 IP アドレスを保持保持する方法について説明します。
始める前に
このタスクについて
受信側は、完全で正しい Proxy プロトコルヘッダーを受信した後でデータを処理できます。 サーバー側では、Proxy プロトコルヘッダーを含むリクエストと、Proxy プロトコルヘッダーを除外するリクエストを同じリスニングポートで同時に受信できません。 最初に受信したデータパケットが Proxy プロトコル形式に準拠していない場合、サーバーはクライアントとの接続を終了します。
注 オリジンが Alibaba Cloud によって提供されるレイヤー 7 (HTTP プロトコルおよび HTTPS プロトコル) 負荷分散サービスを使用している場合、Proxy
プロトコルを使用してクライアントのソースIPアドレスを保持することはできません。 オリジンが他のクラウドサービスプロバイダーによって提供された、またはユーザーが作成したレイヤー7
(HTTP プロトコルおよび HTTPS プロトコル) 負荷分散サービスを使用している場合、オリジンがProxy プロトコルの解析を許可しているかどうかを確認する必要があります。
Proxy プロトコルが解析可能であることが確認できた場合、クライアントの送信元 IP アドレス保持機能を有効化します。
手順1:クライアントの送信元 IP アドレスの保持を有効にする
OSS でクライアントの送信元 IP アドレス保持機能を有効にするには、以下の操作を実行します。
手順 2:オリジンの Proxy プロトコルを設定する
オリジンの Proxy プロトコルを設定すると、Proxy プロトコルヘッダーを含むリクエストのみ許可されます。
以下のコードは HTTP を例を使用して、NGINX が Proxy プロトコルヘッダーを解析して送信元 IP アドレスに関する詳細情報を取得し、X-Forwarded-For
に送信元 IP アドレス情報を追加する方法を示しています。 オリジンはクライアントの送信元 IP アドレスを取得できます。
upstream example.com {
server 10.xx.xx.42:9000 max_fails=200 fail_timeout=10;
keepalive 2000;
}
server {
listen 80 proxy_protocol; ## Enable the parsing of the proxy_protocol header
server_name example.com;
keepalive_timeout 60;
include global.conf;
include error_pages.conf;
proxy_set_header X-Forwarded-For $proxy_protocol_addr; ## Add the HTTP header** when you send the request to the backend server.
proxy_set_header X-Real-PORT $remote_port;
location /dispatch {
set $switch "example.com";
proxy_pass http://$switch;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
クライアントは、高速化された IP アドレスを使用してオリジンのサービスにアクセスします。 NGINX がProxy プロトコルヘッダーを含むリクエストを処理した後、オリジンはクライアントの送信元
IP アドレス情報を HTTP ヘッダーのX-Forward-For で確認できます。 X-Forward-For の値は次の形式です。
X-Forwarded-For: source IP address of the client, IP address of the proxy server 1, IP address of the proxy server 2,...
最初の IP アドレスが、クライアントの送信元 IP アドレスです。