2023.09.19 更新:尝试失败了,因为如果回退源是未备案域名,在 CF 上直接解析到国内服务器会被阻断。如果你尝试过了一段时间后发现在海外访问网站(物理or魔法)发生大量 5xx 错误乃至直接打不开,那就是被阻断了。从即日起,下面的内容就当图一乐。

本文主要参考来源:

Configuring Cloudflare for SaaS · Cloudflare for Platforms docs

网站利用cloudflare SaaS实现分流加速国外访问-梦随乡兮 - 我的心路历程

为什么要“多此一举”

正如我在 WordPress 加速系列(4):CDN 加速 – Eterance的小窝 里所示,套个阿里云 CDN 已经能加速很多了。但是仍有不足:我只开启了中国大陆加速。为什么不开启阿里云 CDN 的全球加速呢?因为:阿里云 CDN 海外流量很贵,是境内的 1 倍多(境内 0.24元/G,境外 0.56元/G)。

那我只开境内加速行不行?也不太行。首先,开 CDN 的目的就是为了加速,但是只开境内加速,海外用户还是千里迢迢访问大陆的 CDN 结点,完全起不到加速的作用;更重要的是,如果有人打,好家伙,CDN 流量费很快就能掏空钱包。

这个时候,我们就把目光投向了 Cloudflare:这玩意的 CDN 在海外那可是一等一的好啊,而且还是能白嫖的,还能抵御 DDOS。美中不足的是,这个在中国大陆又是“减速器”,访问巨慢;并且想要使用他家的 CDN,得把解析转过来,但是因为我又不太想把我的博客域名转出去,在阿里云就挺好的。

那么有没有什么办法,能境外访问走 CF CDN,境内访问走国内 CDN ,还不用把域名转到 CF 呢?哎,还真有,那就是 Cloudflare for SaaS。

效果对比

按照本专栏的惯例,效果放在前面。

之前

境外 ping 全走国内 CDN 了,慢得要死

之后

境外访问变成 Anycast Cloudflare 了,速度飞快

先决条件

  • 一个被加速的国内域名(需要备案),如文中的 blog.baldcoder.top
  • 一个托管到 Cloudflare 的海外域名,如我文中的 eterance.com。这个域名用作海外加速的回退源。

解析回退域名

首先添加解析到源服务器 IP (即使上了境内 CDN 也是填服务器 IP)

然后在宝塔上添加该回退域名(纯静态),并且申请 SSL 证书(不然之后海外访问会显示“重定向次数过多”)、开启强制 HTTPS。

设置 Saas

回到 CF 控制台,点进回退域名,第一次开启需要绑定信用卡或 paypal(我使用绑了银联 62 开头的借记卡的 paypal)。

然后添加回退域名

刷新一下,如果显示有效就开始添加自定义域名。

备注

免费帐户每个二级域名(eterance.com)只能设置一个回退源。也就是说,就算 CF 给了 100 个免费加速域名额度,但是它们都只能指向回退源(blog.earth.eterance.com)指向的那个服务器。

填要被加速的域名

然后查看 txt 解析记录

我的被加速域名在阿里云,就去阿里云添加解析(如果像我一样,CF 给了两个 TXT,两个都要做)。注意有的云服务商可能不需要你自己写二级域名,别写错了。

等个几分钟刷新网页,就会解析成功。

之后回到被加速域名的控制台,(可以删掉那两个TXT解析),添加一个指向回退源的 cname:

也就是说有两个共存的、相同主机名的解析:一个默认的走阿里云 CDN,一个是海外访客走 CF 的 CDN。

效果2

我的台式机访问,图片来自阿里云的 CDN:

使用位于新加坡的 Azure Windows 服务器访问,图片来自 Cloudflare 的 CDN: