潮白河社区网

潮白河社区
北三县区域最大的社区服务网站!
查看: 1866|跟帖: 0
打印 上一主题 下一主题

[IT技术] Web服务器 透明 获取客户端IP

[复制链接]

1545

主题

3923

帖子

4301

潮白币

站长

Rank: 9

UID
1
积分
24458

优秀版主最佳新人

会员类型
业主
小区名称
温莎郡
小区楼号
10号楼 1单元
跳转到指定楼层
楼主
发表于 2014-4-17 18:54:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

http://fj.chaobaihe.net 潮白河点评网

获得客户端IP本来 是一个非常简单的事情,程序里很多时候使用REMOTE_ADDR环境变量就可以了,但是 一些 pv 比较大的 网站,架构 也会复杂些(不去大公司 还真接触不到这些!)![比如说Apache前有Nginx,或者Nginx前有Squid,这时就复杂了,还得考虑诸如:HTTP_CLIENTADDRESS,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR等环境变量,当然可以通过编写程序代码来处理此类逻辑,不过这样的解决方法不够透明,毕竟很多第三方程序并没有考虑这些情况,而且后面服务器的日志里面记录的IP全变成了前面服务器的IP:

案例1:Apache前有Nginx
本文章来源于潮白家园网: http://www.chaobaihe.net
本文章来源于潮白家园网: http://www.chaobaihe.net有些网站使用这样的方式来分离静态请求和动态请求,Nginx放在前面处理静态请求,然后再把动态请求转发给后面的Apache,不过如此一来,Apache日志里看到的IP就是Nginx的IP了,为了能让Apache透明获取IP,可以使用mod_rpafhttp://house.chaobaihe.net 潮白房产网

本文章来源于潮白家园网: http://www.chaobaihe.net配置很简单,只需在配置文件里加上如下内容:
http://house.chaobaihe.net 潮白房产网
http://bbs.chaobaihe.net 潮白河社区网LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so
http://fj.chaobaihe.net 潮白河点评网RPAFenable On
http://fj.chaobaihe.net 潮白河点评网RPAFsethostname On
http://house.chaobaihe.net 潮白房产网RPAFproxy_ips 127.0.0.1 192.168.0.1
http://fj.chaobaihe.net 潮白河点评网RPAFheader X-Forwarded-For
http://bbs.chaobaihe.net 潮白河社区网http://fj.chaobaihe.net 潮白河点评网
说明:192.168.0.1指的是Nginx内网IP,可以设置多个IP。
http://fj.chaobaihe.net 潮白河点评网
本文章来源于潮白家园网: http://www.chaobaihe.net最后确认一下Nginx配置文件里在把动态请求转发给Apache的时候是否设置了如下内容:
http://fj.chaobaihe.net 潮白河点评网
http://bbs.chaobaihe.net 潮白河社区网proxy_set_header Host $host;http://bbs.chaobaihe.net 潮白河社区网
proxy_set_header X-Real-IP $remote_addr;
http://bbs.chaobaihe.net 潮白河社区网proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
http://news.chaobaihe.net 潮白新闻网http://bbs.chaobaihe.net 潮白河社区网
重新加载一下服务,差不多就OK了。
http://news.chaobaihe.net 潮白新闻网
本文章来源于潮白家园网: http://www.chaobaihe.net案例2:Nginx前有Squid
http://bbs.chaobaihe.net 潮白河社区网http://fj.chaobaihe.net 潮白河点评网
有些网站使用这样的方式来搭建分布式缓存,若干台Squid放在前面提供缓存服务,内容从后面的Nginx获取。不过如此一来,Nginx日志里看到的IP就是Squid的IP了,为了能让Nginx透明获取IP,可以使用NginxHttpRealIpModule
http://bbs.chaobaihe.net 潮白河社区网http://bbs.chaobaihe.net 潮白河社区网
NginxHttpRealIpModule缺省并没有激活,可以在编译的时候使用--with-http_realip_module选项激活它。http://bbs.chaobaihe.net 潮白河社区网
http://news.chaobaihe.net 潮白新闻网
配置很简单,只需在配置文件里加上如下内容:http://bbs.chaobaihe.net 潮白河社区网

http://house.chaobaihe.net 潮白房产网set_real_ip_from   192.168.1.0/24;
http://bbs.chaobaihe.net 潮白河社区网set_real_ip_from   192.168.2.1;http://news.chaobaihe.net 潮白新闻网
real_ip_header     [X-Real-IP|X-Forwarded-For];
http://house.chaobaihe.net 潮白房产网
http://bbs.chaobaihe.net 潮白河社区网需要说明的地方就是设置IP源的时候可以设置单个IP,也可以设置IP段,另外是使用X-Real-IP还是X-Forwarded-For,取决于前面的服务器有哪个头。http://news.chaobaihe.net 潮白新闻网
http://bbs.chaobaihe.net 潮白河社区网
重新加载一下服务,差不多就OK了。http://news.chaobaihe.net 潮白新闻网

http://news.chaobaihe.net 潮白新闻网Lighttpd有一个类似的模块叫mod_extforward,功能差不多,就不多说了。http://fj.chaobaihe.net 潮白河点评网

本文章来源于潮白家园网: http://www.chaobaihe.net
[发帖际遇]: ITman-小爽 在潮白河社区乐于助人,奖励 8 贡献. 幸运榜 / 衰神榜
分享到: 0
关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表