自由屋推书网—热门的小说推荐平台!

你的位置: 首页 > wordpress分享

WordPress透过CDN代理获取访客评论者真实IP地址

2022-01-10 15:21:49

今天在编辑修改某评论时,突然发现评论修改完后,Wordpress会把原记录的评论者 IP 更新为评论编辑修改者的 IP,WordPress 的这个评论者 IP 修改逻辑显然是不对的,经过测试,才发现是主题里的一个透过代理获取用户真实 IP 的钩子函数导致的问题...

钩子函数来自这里,需要修改为下面这样后才能行:

  1. /**
  2.  * WordPress 透过 CDN 代理获取访客评论者真实 IP 地址 - 龙笑天下
  3.  * https://www.ilxtx.com/wordpress-get-real-comment-ip.html
  4.  */
  5. function dr_filter_get_real_comment_ip($comment_author_IP) {
  6.     if( is_admin() ){
  7.         return $comment_author_IP;
  8.     }
  9.     $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
  10.     // 使用 CloudFlare CDN
  11.     if ( !empty($_SERVER['HTTP_CF_CONNECTING_IP']) ) {
  12.         $HTTP_CF_CONNECTING_IP = explode(',', $_SERVER['HTTP_CF_CONNECTING_IP']);
  13.         if (!empty($HTTP_CF_CONNECTING_IP)) {
  14.             $REMOTE_ADDR = trim($HTTP_CF_CONNECTING_IP[0]);
  15.         }
  16.     }
  17.     else if (!empty($_SERVER['X_FORWARDED_FOR'])) {
  18.         $X_FORWARDED_FOR = explode(',', $_SERVER['X_FORWARDED_FOR']);
  19.         if (!empty($X_FORWARDED_FOR)) {
  20.             $REMOTE_ADDR = trim($X_FORWARDED_FOR[0]);
  21.         }
  22.     }
  23.     /*
  24.     * Some PHP environments will use the $_SERVER['HTTP_X_FORWARDED_FOR'] 
  25.     * variable to capture visitor address information.
  26.     */
  27.     else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  28.         $HTTP_X_FORWARDED_FOR= explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  29.         if (!empty($HTTP_X_FORWARDED_FOR)) {
  30.             $REMOTE_ADDR = trim($HTTP_X_FORWARDED_FOR[0]);
  31.         }
  32.     }
  33.     return preg_replace('/[^0-9a-f:\., ]/si', '', $REMOTE_ADDR);
  34. }
  35. add_filter( 'pre_comment_user_ip', 'dr_filter_get_real_comment_ip');

WordPress 额外配置

根据用户反馈,使用 CloudFlare 等 CDN 代理时,需要额外再修改 Wordpress 的配置文件 wp-config.php,在里面加入下面代码才能起效果:

  1. // WordPress 使用 CDN 后获取访客真实 IP
  2. if( !emptyempty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
  3.     $get_HTTP_X_FORWARDED_FOR = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  4.     $_SERVER['REMOTE_ADDR'] = trim($get_HTTP_X_FORWARDED_FOR[0]);
  5. }

编辑推荐

热门小说