|
このモジュールにより、クライアントリクエストヘッダー内のクライアントIPアドレス値(例:X-Real-IPやX-Forwarded-For)を変更できます。 この機能は、Nginxがレイヤー7の負荷分散プロキシの背後で動作する場合、Nginxサーバーにとって非常に有用です。なぜなら、クライアントリクエストのローカルIP(すなわちクライアントのリクエストアドレス)がレイヤー7プロキシを通過する際にクライアントのIPアドレスヘッダーに追加されるため、バックエンドのNginxがクライアントのIPアドレス値を取得できるからです。 モジュールはデフォルトでインストールされていないので、モジュールを使いたい場合は、インストールコンパイル時に-with-http_realip_moduleオプションを追加する必要があります。 このモジュールを使用する理由は、バックグラウンドサーバーが元のクライアントのIPアドレスを記録できるからです。 構成例set_real_ip_from 192.168.1.0/24; set_real_ip_from 192.168.2.1; real_ip_header X-Real-IP;
指 秩序 モジュールは2つの命令のみを提供します。 命令名:set_real_ip_from 機能:このコマンドで信頼されるアドレスを指定することは、正確なIPアドレスに置き換えられます。 信頼できるUnixソケットもバージョン0.8.22以降使用可能です。 ここでのIPセットはフロントエンドを指しますンギンクス、ニス又はイカの知的財産住所。 構文論:set_real_ip_from [アドレス|CIDR|」 ユニクス:「」 デフォルト値:なし 使用環境:http、サーバー、ロケーション 命令名:real_ip_header 関数:このコマンドは、IPアドレスを置き換えるためにどのヘッダーを使うかを設定するために使われます。 X-Forwarded-Forを使用する場合、モジュールはフロントエンドプロキシのIPアドレスをX-Forwarded-Forヘッダーの最後のIPアドレスに置き換えます。 構文法:real_ip_header [X-Real-IP|転送しました] デフォルト値:real_ip_header X-Real-IP 使用環境:http、サーバー、ロケーション ユースケース 以下の例では、私たちの環境はこうです:2つのNginxサーバーがあり、1つはフロントエンド、もう1つはバックエンドです。フロントエンドのNginxはプロキシとして、バックエンドのNginxはページアクセスの提供に使われます。さらに、以下のIPアドレスを持つクライアントも存在します。 Frontend Nginx: 192.168.7.10 Backend Nginx: 192.168.1.15 クライアントホスト:218.239.201.36 フロントエンドのNginx構成は以下の通りです: サーバー { 80; server_name www.xx.com;
所在地 / { ルートhtml; インデックスindex.html index.htm; チャーセット UTF-8; }
所在地 /865 { proxy_pass http://192.168.3.139:80/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header ホスト$host; proxy_redirect }
……
} バックエンドのNginx構成は以下の通りです: サーバー { 80; server_name localhost;
所在地 / { ルート /var/www/html; インデックスindex.html index.htm; } テストへのアクセス http://www.xx.com/865 にアクセスする場合、問題なく通常のアクセスが可能です。アクセスログは以下の通りです: フロントエンドのNginxからのログ: 218.239.201.36 - - [30/Aug/2011:16:09:56 +0800] "GET /865/ HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" バックエンドのNginxからのログ: 192.168.7.10 - - [2011年8月30日:16:09:56 +0800] "GET // HTTP/1.0" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" バックエンドのNginxログは元のクライアントのIPアドレスを記録せず、フロントエンドのNginxのIPアドレスを記録しています。 バックグラウンドのNginxサーバーの設定を以下に変更すると: サーバー { 80; server_name localhost; set_real_ip_from 192.168.3.0/24; set_real_ip_from 100.100.0.0/16; real_ip_header X-Real-IP;
所在地 / { ルートhtml; インデックスindex.html index.htm; }
……
}
次に再度アクセステストを行います: フロントエンドのNginxからのログ: 218.239.201.36 - - [30/Aug/2011:16:10:28 +0800 "GET /865/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" バックエンドのNginxからのログ: 218.239.201.36 - - [30/Aug/2011:16:10:28 +0800] "GET // HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" 今回はバックグラウンドでクライアントのIPアドレスが記録されていることがわかります。
|