Discuz x3论坛使用CDN后获取真实IP的解决方法

公司论坛升级成Discuz x3之后获取的IP地址老是不正确导致一下莫名其妙的问题,解决方法如下:

打开\source\class\discuz\discuz_application.php文件,找到_get_client_ip(大约360行)方法。将代码改为:

private function _get_client_ip()
{
    $ip = $_SERVER['REMOTE_ADDR'];


    if(isset($_SERVER['HTTP_CDN_SRC_IP']))
    {
        $ip = $_SERVER['HTTP_CDN_SRC_IP'];
    }
    elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP']))
    {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }
    elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches))
    {
        foreach ($matches[0] AS $xip)
        {
            if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip))
            {
                $ip = $xip;
                break;
            }
        }
    }


    return $ip;
}
需要注意的是不同的CDN公司有可能会有差别,最简单的方法是新建一个PHPINFO文件在服务端看一下是否有对应的变量。


你可能感兴趣的:(IP,discuz,HTTP_CDN_SRC_IP,HTTP_CLIENT_IP)