这个博客架设在Xehost的达拉斯VPS上,不过细心的童鞋应该发觉访问速度比美国的VPS快很多,实际Ping值也在100以下。其实这都归功于CDN,目前在用incapsula的免费款(每月50G流量对于一般BLOG都够用),而且幸运地被分配到了日本节点,所以访问速度比较不错。
速度是上去了,不过随之而来的问题就是无法获得访客评论时的真正IP——显示的都是那个日本节点的IP地址。经过一番搜索后,找到很多方法,实际测试下来有两种方法是比较靠谱的。
第一种方法:
在wp-config.php开头加入以下代码:(把wp-config.php中的代码全部看了遍,并无关于获取IP地址的其他代码,所以我加在了最后,实际效果和在开头一样)
/* 获取评论的真实IP */ if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $list[0];}
第二种方法:
打开wp-includes/comment.php,找到wp_new_comment函数,这个函数是将一个新评论入库。
把其中
把其中
$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', ",$_SERVER['REMOTE_ADDR'] );
修改为
$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', ",$_SERVER['HTTP_X_FORWARDED_FOR'] );
另外将
$_SERVER['REMOTE_ADDR']
替换为
$_SERVER["HTTP_X_FORWARDED_FOR"]
这样就OK了
做下注解:
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER["HTTP_X_FORWARDED_FOR"] #透过代理服务器取得客户端的真实 IP 地址
两种方法我测试下来,实际上是有区别的,主要在于系统因为评论给博主自动发的通知邮件,如图中红框所示:
上面是用方法一被评论后收到的邮件——评论者IP和其主机名一致;下面是用方法二后得到的——评论者IP有两个而且其主机名没有获取到。
从上得出的结论就是:
强烈建议使用第一种方法——简洁、方便、完美!
目前有2条回应
Comment
Trackback
- 本篇文章没有Trackback
额··谢谢分享··
谢谢,用您的第一种方法解决了问题。