• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
百分百
http://www.qrw100.com
博客园    首页    新随笔    联系   管理    订阅  订阅

Nginx反向代理Apache的情况下让Apache获得真实IP

自从Nginx出现以后, 我们都喜欢让 Nginx 跑在前方处理静态文件, 然后通过 proxy 把动态请求过滤给 apache.

那么就会出现个问题, 跑在后方 apache 上的应用获取到的访客IP都是Nginx所在服务器的IP , 或者是本机 127.0.0.1 .

最明显就是查看 apache 的访问日志.就会见到来来去去都是内网的IP.
如果你的应用有诸如, "单个IP不能重复登陆”, "单个IP注册相隔n分钟”... 之类用于IP判别的安全规则.
这么就麻烦了....

但还好, 你可以通过修改 nginx proxy 的参数令后端应用获取到 Nginx 发来的请求报文获取到外网的IP.

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

 

但这解决的问题单单只是应用上, apache 日志上所获取的ip依然还是本地.

这个时候就需要配合apache的一个第三方模块"mod_rpaf"了, 官方网站: http://stderr.net/apache/rpaf/

安装方法:
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/opt/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

安装完成后在httpd.conf添加如下:

LoadModule mod_rpaf-2.0.so_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.1.90    #Nginx所在服务器的IP.
RPAFheader X-Forwarded-For

重启apache, 再看apache的访客日志就是真实的用户ip了.
遗留问题为, SERVER_ADDR成127.0.0.1了, 求解???

posted @ 2011-11-18 13:05  爱尚美  阅读(857)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3