admin 发表于 2024-12-28 18:59:03

网站套了 Cloudflare 后,在服务器 Nginx 阻止中国 IP 的方式

用户访问网站的流程:浏览器 -> Cloudflare CDN -> 服务器 Nginx -> 服务器 PHP

Cloudflare 免费版无法配置自定义拦截网页,所以在 Nginx 里自定义

1. 在 Nginx 的 server 节点末尾增加下代码:
set $is_blocked 0; # 默认不阻止
if ($http_cf_ipcountry = "CN") { # 阻止中国 IP,注意 = 两边都有空格
set $is_blocked 1;
}
if ($http_cf_connecting_ip ~ "^a123:b456:c789") { # 放行 a123:b456:c789 开头的 IP
set $is_blocked 0;
}
if ($http_cf_connecting_ip ~ "^192.168.") { # 放行 192.168. 开头的 IP
set $is_blocked 0;
}
if ($is_blocked) {
return 451; # 如果被阻就返回 451
}
error_page 451 = @custom_451; # 自定义 451 错误页面
location @custom_451 { # 返回自定义 HTML 内容
default_type text/html;
return 200 "
<!DOCTYPE html>
<html>
<head>
    <meta charset=\"UTF-8\">
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
    <title>451 Forbidden</title>
</head>
<body>
    <p>根据服务器所在国家的法规,无法为您所在的国家/地区显示网页内容</p>
    <p>您的 IP:${http_cf_connecting_ip}(中国大陆)</p>
</body>
</html>";
}

Mita 发表于 2024-12-29 10:51:40

如果铁了心阻止特定地区的话,方法比想象的还要多。
尤其是曾经作为特定地区用户,如今作为服务提供者,反水起来绝对是见招拆招的,例如抖音国际版tiktok。

tiktok检测的除了IP归属地,还有:

IP类型(宽带/托管)
系统时区是否匹配ip,若为否,则很有可能是装的。
电话卡发行国家,上次tiktok苹果手机特定版本检测失败是苹果换了接口,アプリ没及时更新,不是tiktok良心发现。
语言(不确定),但都是说中文的地方,中国是zh-cn,新加坡是zh-sg,还是有不同的。

单纯是墙的话已经不是太高的门槛了,见过太多电脑翻墙出来,人脑仍然翻不过内心的墙的胡搅蛮缠的家伙。
门槛多少要有一点的,没有门槛的网络90%都是垃圾信息。有些“人”它就是给你找点不痛快,影响自己心情,它心里才痛快。

潇湘妃子 发表于 2024-12-28 22:37:45

勋章挂满了

老酒 发表于 2024-12-28 20:15:46

第一次看到admin发帖了

wresource 发表于 2024-12-29 13:09:22

我就说嘛,昨天国内裸连,现在不行了

mobile 发表于 2024-12-29 20:27:37

wresource 发表于 2024-12-29 13:09
我就说嘛,昨天国内裸连,现在不行了

昨天规则没写好,变成全部放行
页: [1]
查看完整版本: 网站套了 Cloudflare 后,在服务器 Nginx 阻止中国 IP 的方式