我用 csf 防火墙屏蔽了中国和俄罗斯的用户,现在来自国内的用户无法连接服务器的 ip ,但是输入域名却可以访问,为何?我已经绑定了自己的域名在 cloudflare ,我不想用户来自国内和俄罗斯的用户访问到,怎么会出现,访问 ip 无法打开,直接输入域名却可以打开呢?什么原因?如何让用户输入域名后,也无法访问?
1
langmoe 2017-03-07 23:24:34 +08:00
有 cdn 的话估计防火墙看到的是 cdn 的 ip 吧
|
3
lyragosa 2017-03-07 23:55:35 +08:00
X-Forward-IP
|
4
huangtao728 2017-03-08 00:20:16 +08:00 via Android
在 Cloudflare 设置屏蔽
|
5
kmdd33 OP @huangtao728 要花钱的现在
|
6
notgod 2017-03-08 08:14:34 +08:00
载入的第一个文件 顶部加
CF 会直接发当前访客的国家代码 比如中国 就是 CN 使用 $_SERVER["HTTP_CF_IPCOUNTRY"]; 获得 如果需要封禁中国和俄罗斯 if (isset($_SERVER["HTTP_CF_IPCOUNTRY"]) && $_SERVER["HTTP_CF_IPCOUNTRY"] == ’ CN ‘ && $_SERVER["HTTP_CF_IPCOUNTRY"] == ’ RU ‘ ) { die('not allow current country'); } 额外会添加的 header $_SERVER["HTTP_CF_CONNECTING_IP"] 访问的真实 IP $_SERVER["HTTP_CF_IPCOUNTRY"] 访问者国家代码 $_SERVER["HTTP_CF_RAY"] CF 的日志 ID $_SERVER["HTTP_CF_VISITOR"] http 和 ssl |
7
notgod 2017-03-08 08:17:37 +08:00
这样简单些
$baned = array("CN","RU"); //禁止国家 if (in_array($baned, $_SERVER["HTTP_CF_IPCOUNTRY"] )) { die('not allow current country'); } 最好把 $_SERVER["HTTP_CF_IPCOUNTRY"] 使用 isset 检测下 不然 CLI 会抛错 |
8
notgod 2017-03-08 08:18:49 +08:00
没注意 写反了....
这样 if (in_array($_SERVER["HTTP_CF_IPCOUNTRY"],$baned)) |
9
dodaddy 2017-03-08 11:21:00 +08:00
不使用 cdn 就可以了
|