最新消息:蔓草札记的微信公众号开通了,赶紧在微信通讯录公众号中搜索“蔓草札记”关注下吧 :)

开启CDN后Emlog无法正确获取访客评论IP地址的解决办法

博客经验 xhhjin 2576浏览 4评论

架设在国外主机上的博客,想要获取更快速度的访问,有一种办法就是使用CDN加速。但速度提上去后,访客评论时显示的地址就是CDN节点的地址,而不是访客评论时的真正IP。

faster website loading

网上搜索后,发现wordpress和discuz的解决方法较多,emlog的却很少,但还不是没有。找到两个方法:

第一种

打开emlog的安装目录,找到这个文件 include/lib/function.base.php , 大约在60行左右,看到如下代码:

/**
 * 获取用户ip地址
 */
function getIp(){
	$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
	if(!preg_match("/^d+.d+.d+.d+$/", $ip)){
		$ip = '';
	}
	return $ip;
}

修改成下面的即可:

/**
 * 获取用户ip地址
 */
function getIp(){
	$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
	if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = $list[0];
    }        
	if(!preg_match("/^d+.d+.d+.d+$/", $ip)){
		$ip = '';
	}
	return $ip;
}

注解:
$_SERVER[‘REMOTE_ADDR’] #正在浏览当前页面用户的 IP 地址。
$_SERVER[‘HTTP_X_FORWARDED_FOR’] #透过代理服务器取得客户端的真实 IP 地址

第二种

也是在上面所说的的位置上,将代码替换为:

/**
 * 获取用户ip地址
 */
function getIp(){
	$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
	if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {
		$ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
	} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/',$_SERVER['HTTP_CLIENT_IP'])) {
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	}        
	if(!preg_match("/^d+.d+.d+.d+$/", $ip)){
		$ip = '';
	}
	return $ip;
}

做完这些修改后,Emlog 就可以正常显示评论人的真实IP,网站统计插件统计的也是真实IP而不是CDN节点的IP。

这两种方法我选择的是第一种,主要是简洁方便,验证也是有效的。第二种未做测试,有兴趣的测试后可以反馈下哈。


欢迎转载,转载请注明出处:蔓草札记 » 开启CDN后Emlog无法正确获取访客评论IP地址的解决办法

♥ 喜欢 0 赞赏
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. ^_^ 拜访
    怪谈3年前 (2013-07-06)回复
  2. 拜访,谢谢博主分享!欢迎来小站坐坐!
    奇闻猎奇3年前 (2013-07-09)回复
  3. 谢谢分享,网站不错!也欢迎您来访!
    真实灵异3年前 (2013-07-13)回复
  4. 博主辛苦,谢谢分享!有空来坐坐!
    未解之谜3年前 (2013-07-18)回复