Syntax Error.

[Sy] Nginx+ApacheでIPが取れない場合の対処

2016/07/10

Nginx をリバースプロキシとして経由して、 Apache(httpd) で動いているサイトでIPを取得しようとすると、デフォルトのままだと プロキシのIPになってしまいます。 その対処方法についてです。

環境

CentOS6.x系にて行いました。(他の環境でも同じような対応でいけると思います)

準備

gcc と httpd-devel が必要になるので、インストールしていない場合は先に入れます。

$ sudo yum install -y gcc httpd-devel

mod_rpafモジュールをインストールする

次に Apache で IP をプロキシから受け取るためには、 mod_rpaf というモジュールが必要になります。

インストールは以下のように行います。

$ mkdir mod_rpaf-0.6
$ cd mod_rpaf-0.6
$ wget https://raw.github.com/ttkzw/mod_rpaf-0.6/master/mod_rpaf-2.0.c
$ sudo /usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

このコマンドでやってることは、

  1. 適当なディレクトリを作業用に作成して移動
  2. mod_rpaf モジュールのソースコードをダウンロードしてくる
  3. apxsコマンドで、ダウンロードしてきたソースコードをコンパイルして Apache で使えるようにする

という感じです。

mod_rpafモジュールを有効化

mod_rpaf モジュールを使えるようになったので、有効化するための設定ファイル/etc/httpd/conf.d/mod_rpaf.confを作成します。

$ sudo vim /etc/httpd/conf.d/mod_rpaf.conf

mod_rpaf.conf の内容は以下のようにします。

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10. 172.16.
RPAFheader X-Forwarded-For

Apacheを再起動して終了

設定を反映させるために、Apache を再起動します。(Nginx はあくまでもプロキシなので、再起動の必要はありません)

$ sudo service httpd restart

参考URL

こちらを参考にしました。ありがとうございます!

関連記事