使用CDN后如何获取访客的真实IP

我们知道一旦你使用CDN加速你的网站后,您的访客的IP地址都将被记录为CDN服务器的IP地址,虽然有些人不会介意,也不会造成非常大的错误,但是,还是有其不便之处,比如说,你的访客在你的博客上评论的时候,所有的留言者的IP都是同一个!那么问题就来了!假如你安装了防垃圾评论插件,那么所有的评论可能都会被视为垃圾评论!

我们的wordpress是使用”REMOTE_ADDR”这个函数来获取访客的IP地址的,那么只要我们将获取的函数替换成”HTTP_X_FORWARDED_FOR”,一般就可以了!

方法一:(测试有效

网络上有一段代码:

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}

将这段代码添加到wp-config.php文件的头部就可以了!
对于使用Cloudflare或者Incapsula的CDN的博客来说,它们有方便的插件可以使用,但是本质上它们也是在wordpress添加这个函数的!但是国内的CDN服务商没有类似的插件可以使用,所以,我们只好使用上面的代码了!

方法二:(测试无效

因为国内网络环境问题,大部分草根站长的服务器都不在国内,但是放在国外访问速度肯定没有国内好,所以就给网站上了CDN。

上了CDN后会发现网站的访问IP都集中在几个IP,查询后才发现那些IP都是CDN的IP,这是因为用了CDN后访客访问网站不是直接访问你的服务器,而是经过CDN,那些IP就是CDN服务器从你网站抓取内容时被记录下来的。

对此,我们只需要在主题的function.php文件最后一行"?>"的前面添加如下代码:

//获取访客真实ip
function GetIP()
{$IP = str_replace(", ", "",str_replace($_SERVER['REMOTE_ADDR'], "",$_SERVER["HTTP_X_FORWARDED_FOR"]));
if ($_SERVER["HTTP_X_FORWARDED_FOR"] != "") {$_SERVER['REMOTE_ADDR'] = $IP;
} else {
$_SERVER['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
}}add_action( 'init', 'GetIP' );

2条评论

  1. 使用CDN后如何获取访客的真实IP
    avatar
    Lv.1 1楼

    Zblog怎么修改?

    • 使用CDN后如何获取访客的真实IP
      avatar
      博主 1楼-1

      未使用过zblog,你可以参考相应的php代码进行修改

    发表评论

  1. 😉
  2. 😐
  3. 😡
  4. 😈
  5. 🙂
  6. 😯
  7. 🙁
  8. 🙄
  9. 😛
  10. 😳
  11. 😮
  12. emoji-mrgree
  13. 😆
  14. 💡
  15. 😀
  16. 👿
  17. 😥
  18. 😎
  19. 😕
  20. 63 queries in 0.198 seconds