apache模块mod_rpaf ,让nginx后端的apache获取访客IP

安装mod_rpaf

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
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
#这里是apache 2.x的安装命令,1.x的不是这样


安装过程出现以下错误的

/usr/local/apache/build/libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic   -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache/include  -I/usr/local/apache/include   -I/usr/local/apache/include   -c -o mod_rpaf-2.0.lo mod_rpaf-2.0.c && touch mod_rpaf-2.0.slo
mod_rpaf-2.0.c: In function 'rpaf_cleanup':
mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:151: warning: implicit declaration of function 'inet_addr'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c: In function 'change_remote_ip':
mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_ip'
apxs:Error: Command failed with rc=65536
.
编辑安装目录下的mod_rpaf-2.0.c
将错误提示中的150,151,164,183,186,187行中 remote_ip和remote_addr分别替换成client_ip和client_ip
保存退出后,再执行一次安装命令


修改apache的配置文件

做完前面工作后,/usr/local/apache/modules目录多出mod_rpaf-2.0.so
现在要做的就是让apache加载这个模块

编辑/usr/local/apache/conf/httpd.conf
LoadModule区域插入以下文本

LoadModule rpaf_module        modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.0.9 192.168.0.10
#ip换成前端nginx服务器ip

RPAFheader X-Forwarded-For
保存配置文件,重启apach e


修改nginx的配置文件

编辑/usr/local/nginx/conf/nginx.conf
加入以下文本

proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

保存配置文件,重启nginx


让apache日志记录正确的访客IP

在LogFormat中加入 %{X-Forwarded-For}i 例如:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined


php程序获取正确访客IP

<?php
if ($_SERVER["HTTP_X_FORWARDED_FOR"]=="") {
    $user_ip=$_SERVER["REMOTE_ADDR"];
} else {
    $user_ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
}
?>


http://zh.wikipedia.org/wiki/X-Forwarded-For (X-Forwarded-For 知识


你可能感兴趣的:(apache,nginx,真实IP,真实地址,mod_rpaf)