リバースプロキシ配下のNginxにおいて、ログにクライアントのIPを出力させたい時の対処

2017年3月16日HTTP SERVERCentOS7, Nginx, systemconfigHTTP SERVER, Nginx, systemconfig

環境はこんな感じです。

クライアント
↓
Apache(WAF、リバースプロキシ)
↓
Nginx(FastCGI)
↓
php-fpm(WordPress)

上記の環境だと、NginxのログにはApacheのIPが出力されて、クライアントのIPがわからなくなってしまいます。
これだと、WAFのログとNginxのログを付き合わせる時に面倒な事になります。

そこで、クライアントIPをNginxのログに出力させます。
手順は、以下の通りです。

まず、Nginxにモジュールが組み込まれているか確認します。

./nginx -V

--with-http_realip_moduleが表示されていれば、モジュールとして組み込まれています。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
nginx version: nginx/1.11.10
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/var/home/ap/nginx --with-http_ssl_module 
--with-http_gzip_static_module --with-http_stub_status_module --with-cc-opt=-Wno-error --with-http_ssl_module
--with-http_gzip_static_module --with-http_stub_status_module --with-cc-opt=-Wno-error --sbin-path=/var/home/ap/nginx/nginx 
--conf-path=/var/home/ap/nginx/etc/nginx.conf --with-pcre --without-http_autoindex_module --without-http_browser_module 
--without-http_empty_gif_module --without-http_geo_module --without-http_limit_req_module --without-http_limit_conn_module 
--without-http_map_module --without-http_memcached_module --without-http_scgi_module --without-http_split_clients_module 
--without-http_upstream_ip_hash_module --without-http_userid_module --without-http_uwsgi_module --with-debug 
--with-http_realip_module

モジュールとして組み込まれていない場合は、再度コンパイルが必要となります。

./configure
 --prefix=/var/home/ap/nginx
 --with-http_ssl_module
 --with-http_gzip_static_module
 --with-http_stub_status_module
 --with-cc-opt=-Wno-error
 --with-http_ssl_module
 --with-http_gzip_static_module
 --with-http_stub_status_module
 --with-http_realip_module        ←←←これを追加
 --with-cc-opt=-Wno-error 
 --sbin-path=/var/home/ap/nginx/nginx 
 --conf-path=/var/home/ap/nginx/etc/nginx.conf 
 --with-pcre 
 --without-http_autoindex_module 
 --without-http_browser_module 
 --without-http_empty_gif_module 
 --without-http_geo_module 
 --without-http_limit_req_module 
 --without-http_limit_conn_module 
 --without-http_map_module 
 --without-http_memcached_module 
 --without-http_scgi_module 
 --without-http_split_clients_module 
 --without-http_upstream_ip_hash_module 
 --without-http_userid_module 
 --without-http_uwsgi_module 
 --with-debug

make all
make install

NginxのServer内に下記ディレクティブを追加します。

       set_real_ip_from www.xxx.yyy.zzz/16; #Apache・Nginx間のサブネットアドレス
       real_ip_header X-Forwarded-For;

以上で、NginxのログにクライアントのIPが表示されるようになります。


ここまで読んで頂きありがとうございます。
現在、ランキング参加中です。良ければランキングボタンをクリック願います。
↓↓↓↓↓↓↓↓

オープンソースランキング

にほんブログ村 IT技術ブログへ
にほんブログ村

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

HTTP SERVERCentOS7, Nginx, systemconfig

Posted by tsuka