nginx前端负载,后端apache获取真实IP设置

原文链接:

nginx前端负载,后端apache获取真实IP设置

参考文献: 前端Nginx,后端Apache获取用户真实IP地址  按照第二种方法设置不成功!

 

网站最前端是nginx,做的PROXY来转发请求到后端的apache上,所以获取的IP 都是NGINX PROXY 机器的IP,这对于分析和记录apache日志等很多基于IP判断的PHP程序都会出现一系列的问题,经过以下两处理便可让apache获取 正式的访问地址:
1.修改NGINX的配置文件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把正确的ip转发到后端。
2.设置apache接受转发来的真实IP
说明:http://stderr.net/apache/rpaf/
下载:http://stderr.net/apache/rpaf/download/  下载地址没打开  新的可以下地址为:百度网盘 :http://pan.baidu.com/share/link?shareid=3151719376&uk=707012518

上面的扩展能保证apache能正常接受转发来的真实IP.

tar zxvf mod_rpaf-0.6.tar.gz 
cd mod_rpaf-0.6

/usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
我的是 yum 安装 改为
apxs实际地址 :/usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

接 着在 httpd.conf中添加

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 172.150.48.1 # 填写Nginx的来访IP
RPAFheader X-Forwarded-For

为了方便管理 我把上面配置单独做成一个 配置文件:httpd-rpaf.conf

内容不变 需要在  http.conf中添加: 

Include conf/http-rpaf.conf  #注意 conf/ 否则找不到正确路径

这样就可以获取客户端访问的真实IP了。

注意:

在nginx:中设置的 转发ip 如下:

#设定负载均衡的服务器列表
      upstream myServer {
        #weigth参数表示权值,权值越高被分配到的几率越大
        #本机上的apache开8080端口
        server 127.0.0.1:8080 weight=6 max_fails=2 fail_timeout=25s;  #本机
        server 192.168.1.101:80 weight=4 max_fails=2 fail_timeout=25s; #内网ip 
        ip_hash;
      }

127.0.0.1仍是本机,本机的 httpd-rpaf.conf配置如下:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1   # 填写Nginx的来访IP   注意这个ip  要和 nginx中配置的应用服务ip一致,否则不能正确记录 外网访问来源ip
RPAFheader X-Forwarded-For

 

posted @ 2015-11-20 16:08  wuling129  阅读(1474)  评论(0编辑  收藏  举报