近期笔者想将手上的一个网站进行速度优化,最先想到的方法是动静分离,即将图片等静态文件使用CDN网络进行加速。由于网站针对的是全球的用户,CDN服务需要同时兼顾国内与国外,这一点必须要在我的考量范围内。目前提供CDN服务的商家很多,例如国内的七牛云、Ucloud、阿里云、腾讯云等,国外的Cloudflare

其中Cloudflare是世界上最大的免费CDN提供商,同时提供了免费的https服务和无限DDOS等各种防护功能,对于国外加速效果显著。但是免费版本不提供国内CDN服务器,对国内加速效果并不理想,甚至会拖慢网站加载速度。

而国内CDN提供商方面,腾讯云提供每月10GB的免费CDN加速,首次使用的用户还能获赠连续6个月的50GB CDN流量,额外购买的流量包也相对来说比较便宜,对于普通站长来说用它再适合不过了。但国内的CDN服务商通常会将国内CDN和海外CDN分开进行计费,即除了需要购买国内的流量包,还需要为海外的流量额外付费,通常情况下海外的费用要高出国内不少,因此对于海外流量方面并不划算。

那么如果我能实现国内用户访问的是国内的腾讯云CDN网络,而海外用户访问的是Cloudflare的CDN网络,岂不美哉?经过笔者网上查阅相关资料,终于找到了二者共用的解决方案。

第一步:修改NS服务器为 Cloudflare 提供的 并启用 Cloudflare CDN加速

由于默认情况下Cloudflare无法直接获取CDN服务器的CNAME解析,只支持修改NS服务器为cloudflare的NS服务器从而设定DNS与加速选项,我们只能先修改NS服务器为cloudflare。

登录Cloudflare注册账号,将需要加速的域名填入,cloudflare会提供DNS导入步骤和NS服务器修改方法,按照指引修改即可,这里不再多赘述。

等待Cloudflare NS校验通过后我们便可以设置DNS了。

因为笔者不喜欢将CDN直接套在主域名上(因为今后可以选择在腾讯云上启用COS+CDN方案),所以我另外开了一个二级域名来作为静态文件域名,就是这里的 cloud.example.com

由于cloudflare的CDN只能将加速的 cloud.example.com 回源至它本身,无法回源到其他域名上(www.example.com),因此我在服务器上添加了一个反向代理,用 cloud.example.com 来代理我的主域名 www.example.com 。当然如果你不想那么麻烦,那么就将CDN直接套主域名上,加速 www.example.com 即可,大家可以通过自己的实际需要相应修改。

将橘黄色的云朵点亮以启用CDN服务,接下来cloudflare会花费大约5-10分钟进行CDN部署和ssl证书签发。

稍等片刻后使用ping工具进行DNS查看,如果发现已经指向Cloudflare服务器即已经部署成功。

第二步:创建并设置腾讯云 CDN

这一步需要激活腾讯云的CDN并创建一个CDN加速域名。例如我需要加速的是我的静态文件二级域名 cloud.example.com ,回源选项里设置为回源 www.example.com ,有条件的还可以启用COS对象存储 + CDN网络分发的方案。如果你是直接套主域名上的,那么就直接回源 www.example.com 即可。大家根据自己实际情况做相应修改。

到此,腾讯云的CDN创建完毕,我们需要在域名管理列表里找到这个域名的加速域名CNMAE解析并记录下来。

 

第三步:将NS服务器切回腾讯云云解析 并设置海外线路使用cloudflare NS服务器解析

这里用到了腾讯云dnspod提供的多线路解析功能,我们将ns服务器从Cloudflare切回腾讯云。如果你的域名存放在阿里云的万网或者百度云等也没关系,他们都提供了类似的多线路解析,使用他们的ns服务器来设置DNS也行。如果你的域名托管商不提供多线路解析,那么可以到腾讯云去添加免费的云解析并将ns服务器切换到腾讯云。

添加加速域名解析,例如我这里 cloud.example.com ,默认解析到腾讯云的CDN,用于国内加速,记录类型为CNAME,填入刚才获取到的加速域名的CNAME。

再添加一条域名解析 cloud.example.com 境外线路,用于海外加速,记录类型为NS,填入cloudflare的NS服务器地址,这个地址可以在cloudflare控制面板里找到。

到此,大功告成!由于NS服务器切换后生效需要一段时间,通常在48小时后才能完全刷新。设置好后还不能立即看出效果,我们需要耐心等待。

加速效果

可以看到国内IP都会走国内的腾讯云节点,而海外则走cloudflare,网站延迟基本控制在了30ms以内。


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。