近期笔者想将手上的一个网站进行速度优化,最先想到的方法是动静分离,即将图片等静态文件使用CDN网络进行加速。由于网站针对的是全球的用户,CDN服务需要同时兼顾国内与国外,这一点必须要在我的考量范围内。目前提供CDN服务的商家很多,例如国内的七牛云、Ucloud、阿里云、腾讯云等,国外的Cloudflare。
其中Cloudflare是世界上最大的免费CDN提供商,同时提供了免费的https服务和无限DDOS等各种防护功能,对于国外加速效果显著。但是免费版本不提供国内CDN服务器,对国内加速效果并不理想,甚至会拖慢网站加载速度。
而国内CDN提供商方面,腾讯云提供每月10GB的免费CDN加速,首次使用的用户还能获赠连续6个月的50GB CDN流量,额外购买的流量包也相对来说比较便宜,对于普通站长来说用它再适合不过了。但国内的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以内。
写在最后
这个方法有一个缺点,就是cloudflare大约每5天就会检查一次你的域名ns服务器是否指向自己,如果不是就会在7天后删除CDN加速。因此我们需要每过10天左右就需要修改一次ns服务器以应付cloudflare的检查。
加入 CloudFlare Partner (补充方法)
以上方法基本每半个月就要修改一次NS指向以防止cloudflare NS验证过期,时间久了很容易忘记更换而导致加速被删除。唯一的解决方法就是使用CNAME解析,但必须加入CloudFlare Partner。笔者曾经尝试向Cloudflare申请加入Partner计划,但被邮件告知必须是 business 或 enterprise 计划才有资格申请,而这两个计划价格并不便宜,因此放弃。近期笔者偶然间看到萌精灵大佬提供免费的 Cloudflare Partner 托管,于是赶紧尝试了一下。
萌精灵CDN面板:https://cdn.moeelf.com/
首先进入萌精灵CDN面板,使用自己的CloudFlare账户登录。可以看到看到我们在cloudflare上注册的域名均被列出。然后我们点击添加域名,添加自己需要加速的域名。这里注意如果之前你已经将域名添加到了cloudflare列表里,请先在cloudflare官网将其删除,否则无法完成添加到 萌精灵CDN 并完成绑定。
添加域名后再添加DNS解析记录,获取到CNAME解析地址。再返回云解析,同NS分线路解析一样,这里我们选择海外CNAME解析,将刚刚获取到的CNAME地址填入即可。由于是CNAME接入,我们就不必担心cloudflare检测过期问题了。
最后再次感谢萌精灵大佬免费提供的cloudflare和CDN面板。