解决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服务器配置
-
添加真实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" -
修改日志格式
调整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
字段过滤请求。
四、验证配置
- 测试日志记录
访问网站后检查Nginx日志,确认记录的IP是否为用户真实IP。 - PHP输出验证
临时在页面中输出$_SERVER[&39;HTTP_X_FORWARDED_FOR&39;]
和$_SERVER[&39;REMOTE_ADDR&39;]
,对比两者是否一致。 - CDN配置检查
确保加速乐已正确配置回源IP,且未覆盖或篡改X-Forwarded-For
请求头。
通过上述步骤,可确保emlog在CDN加速场景下正确记录用户真实IP。若问题仍存在,需排查CDN服务商是否使用了非标准的请求头字段(如CF-Connecting-IP
等),并相应调整Nginx和PHP的解析逻辑。


外国老眼中的无线路由器怎么设置,鸟文水平有限,基本用的GG翻译。
本指南介绍了如何建立一个家庭计算机网络的路由


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

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