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.conf
LoadModule 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アドレスが記録されていれば成功です!
カテゴリ: