这个问题困扰我很久了,特别是近来发垃圾评论的人增多,想封IP都变得不可能,因为WordPress在后台记录的IP统统为127.0.0.1,在其他主机上都很正常,很肯定是主机商的问题。
找了客服同志,客服找技术支持,给的答复是:
把以下代码加到wp-config.php开头

  1. if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  2. {
  3. $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
  4. $_SERVER['REMOTE_ADDR'] = $list[0];
  5. }

太神奇了~~
最后,客服说,高难度的事都要找那位技术人员……

解读一下,$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']都是用于获取客户端IP的,全局变量,因此可以直接调用。
$_SERVER['REMOTE_ADDR']是正在浏览当前页面用户的 IP 地址,由于服务器自身启用了反向代理,所以这个变量始终记录IP为127.0.0.1
$_SERVER["HTTP_X_FORWARDED_FOR"]用于获取使用代理服务器用户的IP,但有时读取的仍然是代理服务器本身的IP。

如果$_SERVER['HTTP_X_FORWARDED_FOR']存在,则用它替代$_SERVER['REMOTE_ADDR'],WordPress在记录IP的时候,就能正确的引用$_SERVER['REMOTE_ADDR']变量的值,正确记录IP。