CentOS5でApacheにmod_rpafをインストールして、クライアントのIPアドレスを取得する
アクセス元のIPアドレスをApacheに知らせてやるには、mod_rpafをインストールした上で、nginxとApacheの両方で適切な設定をする必要があります。
mod_rpafをインストールする
※既にyumでapacheをインストール済みとします。# yum install httpd-devel ← apxsをインストール
# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
# tar xvfz mod_rpaf-0.6.tar.gz
# cd mod_rpaf-0.6
# nano Makefile
Makefileの4行目あたりを編集する。
#APXS2=$(shell which apxs2) ←コメントアウト
APXS2=/usr/sbin/apxs ←追記
# make rpaf-2.0
# make install-2.0
Nginx側の設定
nginx.conf # バーチャルホストの設定
server {
listen 80;
server_name example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
location / {
root /path/to/foo;
index index.html;
}
# proxy
location /foo/ {
proxy_pass http://exampl.com:8080;
}
Apache側の設定
/etc/httpd/conf/httpd.confLoadModule rpaf_module modules/mod_rpaf-2.0.so
/etc/httpd/conf.d/vhosts.conf
<VirtualHost *:8080>
ServerName example.com
DocumentRoot /foo/bar/example.com
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.20.30.40 (ここはサーバのグローバルIP)
RPAFheader X-Forwarded-For
</VirtualHost>
nginx, httpdの再起動
/etc/init.d/nginx restart
/etc/init.d/httpd restart
これでApacheのaccess_logを見てみて、クライアントのIPアドレスが記録されていれば成功です!