这个博客架设在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
  • 孙超博客 回应于2012/09/20 13:29 回复TA

    额··谢谢分享··

  • 世界语 Esperanto 回应于2017/02/02 09:42 回复TA

    谢谢,用您的第一种方法解决了问题。

  • 本篇文章没有Trackback
你好,欢迎光临!