SLB ではクライアントの物理 IP アドレスの取得がサポートされています。
概要
SLB では、物理 IP アドレスの取得サポートはデフォルトで有効にされています。
- レイヤー 4 ロードバランシングサービス (TCP プロトコル) の場合、リスナーはリクエストヘッダーを変更せずにクライアントからのリクエストをバックエンド ECS サーバーに配信できます。 したがって、クライアントの物理 IP アドレスを直接入手することができます。
- レイヤー 7 SLB サービス (HTTP および HTTPS プロトコル) の場合は、まずアプリケーションサーバーを設定してから、
X-Forwarded-For
ヘッダーを使用してクライアントの物理 IP アドレスを取得する必要があります。クライアントの物理 IP アドレスは、HTTP ヘッダーのX-Forwarded-For
フィールドに次の形式で保存されます。X-Forwarded-For: the real IP address of the user, the proxy server 1-IP, the proxy server 2-IP, ...
X-Forwarded-For
ヘッダーを使用してクライアントの物理 IP アドレスを取得した場合、取得された最初のIP アドレスが物理 IP アドレスになります。注 HTTPS SLB サービスの場合、SSL 証明書はフロントエンドリスナーで設定され、バックエンドは引き続き HTTP プロトコルを使用します。 したがって、クライアントの物理 IP アドレス取得のためのアプリケーションサーバー上での設定は、HTTP プロトコルおよび HTTPS プロトコルで同じです。
IIS7/IIS8 の設定
- F5XForwardedFor を ダウンロード して解凍します。
- F5XFFHttpModule.dll と F5XFFHttpModule.ini ファイルをサーバーの x86\Release または x64\Release ディレクトリ (OSのバージョンに合わせて) から C:\F5XForwardedFor\ などのディレクトリへコピーします。 IIS プロセスがこのディレクトリへの書き込み権限を持っていることを確認してください。
- IIS マネージャー を開き、 [モジュール] 機能をダブルクリックします。
- [ネイティブモジュールの設定] をクリックし、表示されるダイアログボックスで [登録] をクリックします。
- ダウンロードした .dll ファイルを追加します。
- 追加されたファイルに ISAPI と CGI の制限を加え、 制限を[Allowed] に設定します。
注 ISAPI CGI アプリケーションがインストールされていることを確認します。
- IIS マネージャーを再起動します。
Apache の設定
- 次のコマンドを実行して、モジュール mod_rpaf をインストールします。
wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz tar zxvf mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
- /alidata/server/httpd/conf/httpd.confファイルを開き、次の情報をコンテンツの最後に追加します。
LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips <IP_address> RPAFheader X-Forwarded-For
注 プロキシサーバーの IP アドレスを取得するには、プロキシサーバーの CIDR ブロックをアドレス範囲 SLB 100.64.0.0/10 とアドレス範囲 Anti-DDoS Pro などのRPAFproxy_ips <IP_address>
に追加します。 カンマ (,) で複数の CIDR ブロックを区切ります。 100.64.0.0/10 は Alibaba Cloud によって予約されています。 したがって、これは誰からも使用されておらず、セキュリティ上のリスクもありません。 - Apache を再起動します。
/alidata/server/httpd/bin/apachectl restart
Nginx の設定
- 次のコマンドを実行して http_realip_module をインストールします。
wget http://nginx.org/download/nginx-1.0.12.tar.gz tar zxvf nginx-1.0.12.tar.gz cd nginx-1.0.12 ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module make make install kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid` kill -QUIT `cat /alidata/server/nginx/logs/ nginx.pid.oldbin`
- nginx.conf ファイルを開きます。
vi /alidata/server/nginx/conf/nginx.conf
- 新しい設定フィールドと情報を次の設定情報の最後に追加します。
fastcgi connect_timeout 300; fastcgi send_timeout 300; fastcgi read_timeout 300; fastcgi buffer_size 64k; fastcgi buffers 4 64k; fastcgi busy_buffers_size 128k; fastcgi temp_file_write_size 128k;
追加が必要な設定フィールド及び情報は次の通りです。
set_real_ip_from IP_address real_ip_header X-Forwarded-For;
注 プロキシサーバーの IP アドレスを取得するには、プロキシサーバーの CIDR ブロックを IP アドレス範囲 SLB 100.64.0.0/10 および Anti-DDos Pro のアドレス調整などでset_real_ip_from <IP_address>
に追加します。 カンマ (,) を使用して、複数の CIDR ブロックを区切ります。 100.64.0.0/10 は Alibaba Cloud によって予約されています。 したがって、これはどのユーザーにも使用されておらず、セキュリティ上のリスクもありません。 - Nginx を再起動します。
/alidata/server/nginx/sbin/nginx -s reload