44
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nginx でアクセス元のIPを正しく表示させる方法

Last updated at Posted at 2014-12-02

The Internet <-> **nginx(リバースプロキシ)** <-> nginx(Webサーバ)

という構成で、Web サーバ側のアクセスログを見ると、
リバースプロキシの IP だけが並んでいて、がっかりします。

そこでアクセス元の IPアドレスを正しく通知するように設定します。

手順としては

  1. リバースプロキシ側の nginx で "X-Forwarded-For" というヘッダを追加。
  2. Webサーバ側で、"X-Forwarded-For" の値をクライアントの IPアドレスとして使用するように設定。
  3. リバースプロキシと Webサーバの nginx を再起動。

Apache なら mod-rpaf で出来るそうですが、今回は nginx なので HttpRealipModule を使います。
まずは、Webサーバ側のの nginx に HttpRealipModule が組み込まれているか確認します。

$ nginx -V
nginx version: nginx/1.7.7
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module **--with-http_realip_module** --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

(--with-http_realip_moduleがあればOKです)

公式のレポジトリから yum でインストールした nginx はデフォルトで組み込まれているようでしたので、そのまま設定を進めます。

リバースプロキシ側に、"X-Forwarded-For" ヘッダを追加する。

$ sudo vi /etc/nginx/nginx.conf
server {
      :
    proxy_set_header X-Forwarded-For;
    $proxy_add_x_forwarded_for;
      :
}

Webサーバ側に以下の設定をします。

$ sudo vi /etc/nginx/conf.d/realip.conf
set_real_ip_from   (リバースプロキシの IP アドレス);
real_ip_header     X-Forwarded-For;

リバースプロキシ、Webサーバの両サーバで nginx を再起動させます。

$ sudo systemctl restart nginx

これでアクセス元の IPアドレスが記録されるようになります。

44
42
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?