2020年7月

如何在备案期间不关闭网站?


博主最近想把服务器迁移到国内,自然就免不了要备案了。那么遇到一个头疼的问题,就是备案期间,管局要求网站不能访问。一般来说,备案的周期还是挺长的,关闭这么长时间还是对网站有不小的影响的。

那么有没有什么方法能够在备案期间不关闭网站,把影响降低到最小呢?答案是肯定的,继续往下看。

通常来说,备案主要涉及两个方面的审核,第一个是云服务器厂商的初审,第二个则是管局的审核。那么我想到的解决办法就是,只屏蔽这两个地区的ip即可。这样可以把影响降低到最小。那么接下来看如何实现屏蔽某个特定地区的ip(可精确到市级)。

废话不多说,直接上代码

<?php
    function get_client_ip() {
        $ip = $_SERVER['REMOTE_ADDR'];
        if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } 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'];
        }
        return $ip;
    }

    $ip = get_client_ip(); //获取访客IP
    $antecedents = $_SERVER['HTTP_REFERER']; //访客来路地址

    $verification1 = '江西省'; //需要屏蔽IP的省份
    $result1 = file_get_contents("http://ip-api.com/json/".$ip."?lang=zh-CN"); //IP数据库来自ip-api.com。
    $address1 = json_decode($result1, true);
    // echo("<script>console.log('".$address1['regionName']."');</script>");

    $verification2 = '江西'; //需要屏蔽IP的省份
    $result2 = file_get_contents("http://freeapi.ipip.net/".$ip); //IP数据库来自ipip.net。
    $address2 = json_decode($result2, true);
    // echo("<script>console.log('".$address2[1]."');</script>");

    // 判断访客IP是否属于江西省,是否来自百度,是否来自谷歌
    if (($address1['regionName'] == $verification1 || $address2[1] == $verification2) && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false) {
        sleep(99999999); // 设置一个999999秒的等待。
        Header("HTTP/1.1 204 No Content");
        exit;
    }
?>

上面的代码是先获取用户的ip地址,然后利用ip地址库查询对应ip的国家,省份,城市等信息。ip-api.com的结果不是特别准确,所以又加上了ipip.net的免费api(还是比较准确的,就是免费api只有3个信息)。对api感兴趣的小伙伴可以直接去官网查看api使用说明。

将以上代码放在首页index.php的开头即可,然后对应地区就打不开首页了。