小龟视频 如何使用动态域名进行地域限制

如何使用动态域名进行地域限制
我们可以使用动态域名来进行地域的访问限制,如:
  • 1.

    限制某个地区无法使用app
  • 2.

    限制国外无法使用app
  • 3.

    对不同地区进行分流,如:北京使用A接口,厦门使用B接口,返回不同的数据
基本流程:通过获取用户的ip,调用外部接口或内部数据库来获取访问者的城市,通过比对其是否存在于预先配置好的城市列表中来判断用户使用哪个接口,如果存在于城市列表中,使用A接口,不存在使用B接口。
示例:通过外部接口进行的地域限制
示例中使用ip138来获取访问者ip所在地区
创建php文件,如dynamic.php,写入以下内容:
<?php
// A接口数据的接口列表,示例:["https://www.baidu.com","https://www.baidu.com","https://www.baidu.com"]
$a_api = ["https://www.baidu.com","https://www.baidu.com","https://www.baidu.com"];

// B接口数据的接口列表,示例:同A接口
$b_api = ["https://www.qq.com","https://www.qq.com","https://www.qq.com"];

// 返回A接口的城市,示例:["北京","厦门"]
$a_city = ["北京","厦门"];

// 国外是否返回A接口,示例:填yes说明返回A接口,其他内容返回B接口
$outside_a = "no";

// https://user.ip138.com/ip ip查询接口token
$token = "";

//获取真实ip
$ip = realIp();

//定义请求的信息
$opts = array(
    'http' => array(
        'method' => "GET",
        'timeout' => 5, //单位秒  
    )
);

//发起请求
$req_api = "https://api.ip138.com/ip/?ip=" . $ip."&token=".$token;
$result = file_get_contents($req_api, false, stream_context_create($opts));
//解析结果
$result_json = json_decode($result, true);

if($result_json["ret"] != "ok" || sizeof($result_json["data"]) == 0){
    //如果解析失败,返回A接口
    echo json_encode($a_api, JSON_UNESCAPED_SLASHES);
    return;
    
}

//如果解析成功,开始判断

//如果是国外
if($result_json["data"][0] != "中国"){
    //如果设置国外返回A接口,返回A接口,否则返回B接口
    echo json_encode($outside_a == "yes"?$a_api:$b_api, JSON_UNESCAPED_SLASHES);
    return;
}

//如果是国内,判断当前城市,是否存在A接口的城市中
$city = $result_json["data"][2] == ""?$result_json["data"][1]:$result_json["data"][2];
echo json_encode(in_array($city,$a_city)?$a_api:$b_api, JSON_UNESCAPED_SLASHES);
return;





//获取真实ip
function realIp()
{
    $ip = "Unknown";
    if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) {
        $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    } elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) {
        $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    } elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]) {
        $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    } elseif (getenv("HTTP_CLIENT_IP")) {
        $ip = getenv("HTTP_CLIENT_IP");
    } elseif (getenv("REMOTE_ADDR")) {
        $ip = getenv("REMOTE_ADDR");
    }
    return $ip;
}
大家可以使用该文件进行扩展,如:
  • 1.

    将调用接口改为其他接口,需要注意某些接口的qps,比如qps为100,说明每秒只能调用100次,对于大站来说是远远不够的
  • 2.

    将调用接口改为数据库查询,需要不断同步最新城市ip
TG交流群(点击进入)----付费帮助搭建---修复---二开,以及发布求资源.
QQ交流群 922260178
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容