Nginx反代apache上显示的ip全部nginx反代ip一个ip地址。这样我们根本无法统计到用户访问情况。可使用以下解决方案:
在配置nginx.conf文件中的http区域添加条规则:(上一贴其实已经加入了这些参数,不过apache貌似不接收)
所以要给apache安装一个模块来实现这个功能
下载模块:
wget http://download.efsync.org/Apache/mod/mod_rpaf-0.6.tar.gz
解压模块:
tar zxvf mod_rpaf-0.6.tar.gz
进入目录:
cd mod_rpaf-0.6
我们先用以下命令查找一下apxs路径
find / -name apxs
我查找到路径如下:
/usr/sbin/apxs
扩展模块:
/usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
然后我们查找httpd.conf文件:
find / -name httpd.conf
/etc/httpd/conf/httpd.conf
编辑httpd.conf文件:
vi /etc/httpd/conf/httpd.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 # 填写Nginx IP
RPAFheader X-Forwarded-For
保存文件,然后使用以下命令重启apache
service httpd restart
如果重启报错说modules/mod_rpaf-2.0.so不存在请复制到对应目录,我就遇到了这个错误!
我重启他报错说
Starting httpd: httpd: Syntax error on line 153 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_rpaf-2.0.so into server: /etc/httpd/modules/mod_rpaf-2.0.so: cannot open shared object file: No such file or directory
大概是说在 /etc/httpd/modules/mod_rpaf-2.0.so没有这个文件,那么我们查找一下mod_rpaf-2.0.so到底在哪使用以下命令
find / -name mod_rpaf-2.0.so
我查找到的路径如下:
/usr/lib/apache/mod_rpaf-2.0.so
那么我们需要把这个文件复制到/etc/httpd/modules/mod_rpaf-2.0.so
创建文件夹:
mkdir /etc/httpd/modules
复制文件:
cp /usr/lib/apache/mod_rpaf-2.0.so /etc/httpd/modules/mod_rpaf-2.0.so
再次使用以下命令重启apache
service httpd restart
这下正常了!!在wordpress评论一条测试,正常获取到真实IP了
-------------------------
-------------------------
-------------------------
-------------------------
proxy_set_header X-Forwarded-For $client_ip;
proxy_set_header X-Real-IP $client_ip;
proxy_pass ....
<?php
echo $_SERVER['X_FORWARDED_FOR'];
//echo $_SERVER['X_REAL_IP']; 均可获取真实IP
?>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。