免费版Cloudflare+Nginx/PHP屏蔽指定国家访问

Cloudflare的Network选项里面默认开启了一项IP Geolocation功能,它会向服务器发送一个访问者国家参数’$HTTP_CF_IPCOUNTRY’,可以通过判断这个参数,来达到屏蔽指定国家访问。

Nginx判断Cloudflare访问者国家:
在域名配置文件的server区加上:

if ($http_cf_ipcountry = CN)
{
 return 500;
 }

这样当中国访客访问时,服务器会返回500状态。如果想屏蔽多个国家访问,可以改成:

if ($http_cf_ipcountry ~* "CN|US")
{
return 500;
}

这样当中国或美国访客访问网站,都会返回500错误。更多国家简码请参考:https://zh.wikipedia.org/wiki/ISO_3166-1_alpha-2

此处只是举例,您可以举一反三做更多的事情,
比如跳转到不同的网址:

if ($http_cf_ipcountry = CN)
{
 rewrite ^/(.*)$ https://cn.bynss.com/$1 permanent;
 }

访问不同的目录:

location ~ /{
        if ($http_cf_ipcountry = CN) {
        root  /home/www/cn;
        }
        }

改完请记得重启Nginx

PHP判断Cloudflare访问者国家:

$country_code = $_SERVER["HTTP_CF_IPCOUNTRY"];
if ($country_code=="CN") {
http_response_code(500);
}
elseif ($country_code=="US") {
http_response_code(500);
}
else {
http_response_code(200);
}

指定的国家访问服务器返回500状态,其他国家访问服务器返回200状态。
此外,Cloudflare还支持的变量有:

$_SERVER["HTTP_CF_CONNECTING_IP"] #访客IP地址
$_SERVER["HTTP_CF_RAY"] #参考链接
$_SERVER["HTTP_CF_VISITOR"] #这可以帮助您了解其http或https