400-680-8581
欢迎光临:路由通
【路由通】IT资讯,IT攻略
位置:路由通 > 资讯中心 > 零散代码 > 文章详情

解决emlog使用加速乐(CDN)后不能记录真实IP

作者:路由通
|
368人看过
发布时间:2013-04-02 19:37:17
标签:
emlog博客系统(http://nctoro.com)使用加速乐(CDN)后发现评论人和在线统计插件显示的IP都是加速乐(CDN)的节点IP,查阅了很多资料终于找到了解决办法:打开includelibfunction.base.php这个文件,找到...通过上述步骤,可确保emlog在CDN加速场景下正确记录用户真实IP。若问题仍存在,需排查CDN服务商是否使用了非标准的请求头字段(如CF-Connecting-IP等),并相应调整Nginx和PHP的解析逻辑。
解决emlog使用加速乐(CDN)后不能记录真实IP

emlog博客系统(http://nctoro.com)使用加速乐CDN)后发现评论人和在线统计插件显示的IP都是加速乐(CDN)的节点IP,查阅了很多资料终于找到了解决办法:

打开includelibfunction.base.php这个文件,找到

/
  获取用户ip地址
 /
function getIp()
    $ip = isset($_SERVER[&39;REMOTE_ADDR&39;]) ? $_SERVER[&39;REMOTE_ADDR&39;] : &39;&39;;

 

在下面插入:

 if (isset($_SERVER[&39;HTTP_X_REAL_FORWARDED_FOR&39;]) && preg_match(&39;/^([0-9]1,3.)3[0-9]1,3$/&39;,

 $_SERVER[&39;HTTP_X_REAL_FORWARDED_FOR&39;]))

$ip = $_SERVER[&39;HTTP_X_REAL_FORWARDED_FOR&39;];

  elseif (isset($_SERVER[&39;HTTP_X_FORWARDED_FOR&39;]) && preg_match(&39;/^([0-9]1,3.)3[0-9]1,3$/&39;,

$_SERVER[&39;HTTP_X_FORWARDED_FOR&39;]))

 $ip = $_SERVER[&39;HTTP_X_FORWARDED_FOR&39;];

elseif (isset($_SERVER[&39;HTTP_CLIENT_IP&39;]) && preg_match(&39;/^([0-9]1,3.)3[0-9]1,3$/&39;,

$_SERVER[&39;HTTP_CLIENT_IP&39;]))

 $ip = $_SERVER[&39;HTTP_CLIENT_IP&39;];

修改成功后保存,emlog就能正常显示评论人的真实IP了,当然在线统计插件也统计的真实IP而不是加速乐(CDN)的节点IP。要解决emlog使用加速乐(CDN)后无法记录真实IP的问题,需通过Nginx配置和PHP代码双重调整,具体步骤如下:



一、Nginx服务器配置




  1. 添加真实IP解析规则
    在Nginx配置文件(通常位于nginx.conf或站点配置文件中)的http块内添加以下代码,用于识别CDN传递的真实IP:


    set_real_ip_from 0.0.0.0/0; 允许所有CDN节点IP:ml-citationref="2,3" data="citationList" real_ip_header X-Forwarded-For;
    声明真实IP的请求头字段:ml-citationref="2,4" data="citationList" real_ip_recursive on;
    递归解析多层代理IP:ml-citationref="3" data="citationList"


  2. 修改日志格式
    调整Nginx日志格式以记录真实IP,在http块内新增日志格式:


    log_format realiplog &39;$http_x_forwarded_for - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"&39;;:ml-citationref="1" data="citationList"

    并在站点配置中将access_log指向新格式:


    access_log /path/to/your/access.log realiplog;:ml-citationref="1" data="citationList"




二、PHP代码调整


在emlog的PHP代码中(如涉及IP记录的功能模块),需优先读取X-Forwarded-For头信息:


if (!empty($_SERVER[&39;HTTP_X_FORWARDED_FOR&39;])) $ip = explode(&39;,&39;, $_SERVER[&39;HTTP_X_FORWARDED_FOR&39;])[0];
取第一个IP地址:ml-citationref="3,6" data="citationList" else $ip = $_SERVER[&39;REMOTE_ADDR&39;];

此逻辑可覆盖CDN转发场景,并避免伪造IP的风险



三、防火墙与CDN的兼容性


若服务器防火墙(如宝塔面板的Nginx防火墙)仍误判CDN节点IP,需在防火墙配置中添加CDN的IP段为信任来源(具体方法需参考防火墙文档),或调整防火墙规则以基于X-Forwarded-For字段过滤请求



四、验证配置



  1. 测试日志记录
    访问网站后检查Nginx日志,确认记录的IP是否为用户真实IP

  2. PHP输出验证
    临时在页面中输出$_SERVER[&39;HTTP_X_FORWARDED_FOR&39;]$_SERVER[&39;REMOTE_ADDR&39;],对比两者是否一致

  3. CDN配置检查
    确保加速乐已正确配置回源IP,且未覆盖或篡改X-Forwarded-For请求头




通过上述步骤,可确保emlog在CDN加速场景下正确记录用户真实IP。若问题仍存在,需排查CDN服务商是否使用了非标准的请求头字段(如CF-Connecting-IP等),并相应调整Nginx和PHP的解析逻辑

相关文章
购买无线路由器,应注意哪些事项?
不可否认,无线网络已经渐渐在我们当中普及,不少用户都渴望体验无线上网的快感。然而作为一种全新的网络硬件设备,多数用户对于无线网络设备并不熟悉,在 选购无线路由器时一筹莫展。这里,我们将向大家介绍选购...
2013-04-02 13:30:19
79人看过
[转]一分钟,让你的笔记本变成无线路由器!~WiFi上网爽歪歪。。
随着Android系统的普及,越来越多手机在运行着Android了。塞班也成为了历史,塞班,这个曾经风 靡一时的智能系统,曾经世界上最多手机运行的系统到如今也只能成为追忆了。还记得那时候的S40和S...
2013-04-02 11:44:47
40人看过
外国友人的无线路由器怎么设置

外国老眼中的无线路由器怎么设置,鸟文水平有限,基本用的GG翻译。


本指南介绍了如何建立一个家庭计算机网络的路由

2013-04-02 10:40:59
197人看过
用了百度广告后出现网站页面在IE8下兼容问题
原来一直没有注意网站对读者们的用户体验度,有一天一个朋友给我说。我的博客在IE8下出现侧边栏显示不正常,整个页面变形。最后排查到只要添加了百度广告就会变形,想去掉百度广告,但我的微薄收入支持不了现在的...
2013-04-01 11:32:54
152人看过
如何建立更好的密码管理

 

您的E-mail密码是你的最后一道防线,当涉及到在线隐私和安全。黑客可以重置密码(获得)你的社交网络,您的银行帐户,甚至你的身份,利用无处不在的裂缝,我忘记了我的密码“按钮。

人们很容易为您的在线账户使...

 

2011-01-06 10:57:00
260人看过
6个路由器的问题 - 如何解决这些问题

这些天来,有机会获得无线宽带是绝对必要的,家庭办公室和小型企业。经过超过十年的创新,你会认为现在标准的无线网关/路由器,将是一个完美的产品图片。可惜的是,没有。

虽然许多路由器都提供了很好的功能,还是...

2011-01-03 10:25:00
186人看过