前言

在使用CDN后,服务器获取到的IP是CDN节点的回源IP。这样就造成了网站日志无法反映真实情况,也对垃圾评论的封禁产生了影响。
以下方法需要CDN支持HTTP_X_FORWARDED_FOR

操作方法

typecho

在Typecho站点根目录里的config.inc.php添加下面这段代码:

/**使用CDN后获取访客真实ip*/
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
  $_SERVER['REMOTE_ADDR'] = $list[0];
}

wordpress

将代码添加到wp-config.php

/**使用CDN后获取访客真实ip*/
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
  $_SERVER['REMOTE_ADDR'] = $list[0];
}

Emlog

打开
/include/lib/function.base.php
找到获取用户ip地址的函数组,修改为以下内容:

/**
 * 获取用户ip地址
 */
function getIp() {
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = $list[0];
    }
    if (!ip2long($ip)) {
        $ip = '';
    }
    return $ip;
}

Nginx

在Nginx的配置重http项目下添加:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
Last modification:March 9th, 2020 at 02:00 pm
如果觉得我的文章对你有用,请随意赞赏