开发者社区> 问答> 正文

nginx前端后apache无法获取真实用户ip

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了

展开
收起
holinhot 2013-08-31 14:39:13 8855 0
5 条回答
写回答
取消 提交回答
  • 回2楼adm‮‭in的帖子
    伪装ip

    -------------------------

    回2楼adm‮‭in的帖子
    另外说一句。我买的统配ssl仅$2 仅$2

    -------------------------

    Renginx前端后apache无法获取真实用户ip
    每个站都改,
    2013-09-01 21:59:03
    赞同 展开评论 打赏
  • 看不太懂   我都是用第三方来统计流量和数据的
    2013-08-31 18:33:59
    赞同 展开评论 打赏
  • 你是我偶像
    2013-08-31 17:59:07
    赞同 展开评论 打赏
  • Renginx前端后apache无法获取真实用户ip
    直接nginx转发client-ip为x-forwarded-for给apache,
    后端应用层从x-forwarded-for获取IP,还省去安装这么多模块,省去服务重启。

    -------------------------

    回 6楼(holinhot) 的帖子
    你买的关我毛事

    -------------------------

    Re:回 5楼(holinhot) 的帖子
    nginx:
    proxy_set_header X-Forwarded-For $client_ip;
    proxy_set_header X-Real-IP $client_ip;
    proxy_pass ....

    后端apache运行php: <?php
    echo $_SERVER['X_FORWARDED_FOR'];
    //echo $_SERVER['X_REAL_IP']; 均可获取真实IP
    ?>


    2013-08-31 17:46:14
    赞同 展开评论 打赏
  • 楼主厉害呀!
    2013-08-31 17:09:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
实时计算正当时-Apache Flink 理论和实战精解 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载

相关镜像