免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4135 | 回复: 0
打印 上一主题 下一主题

[Web] nginx经过两次反向代理获取真正的ip地址[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-09 12:17 |只看该作者 |倒序浏览
本帖最后由 hlgao 于 2011-08-09 14:56 编辑

今天使用nginx来作为反向代理服务器,用户的请求经过nginx服务器,作为反向代理服务器,把请求反向内网的服务器
然而内网的服务器仍然是nginx来做服务器处理静态页面,动态的页面再以proxy代理的形式发到apache服务上面来处理,如果nginx服务器直接请求apache服务器的话,可以在apache上加一个模块mod_rpaf-2.0.so 来实现,
在nginx的配置里面加这样的代码:

  1. proxy_set_header   Host   $host;
  2. proxy_set_header   X-Real-IP $remote_addr;
  3. proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
复制代码
这样就apache里面就可以获得用户的真正ip
但是这里多经过了一次nginx服务器,获得了都是nginx的反向代理服务器的网关地址,现在怎么样才能获得真正的用户ip呢?




这个问题已经解决了,把自己的解决方法说一下,以后有遇到同样问题的可以方便处理:
开始的时候也没有想到是什么原因,获取ip的函数也是正常的,刚开始想着把那个真实ip的也用proxy的传递过去,不过结果还是不正确。
后来在那里看获取ip的函数,不知道怎么心血来潮,把每一步结果都显示了一遍,结果发现了一个问题,
获得的服务端变量HTTP_X_FORWARDED_FOR竟然是两次的ip的叠加,一个是用户ip,一个是网关ip,这样的话就好办了。
在第二层的nginx配置文件里面,把这个变量去掉就好了,
去掉这段
  1. proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
复制代码
重新加载nginx配置
  1. /usr/local/nginx/sbin/nginx -s reload
复制代码
成功~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP