一、重构缘由
由于子域名日渐增多,
我们的 qiqinb.com 的旧架构已过于杂乱。
让我们来重构吧!
二、旧架构简述
阿里云边缘安全加速 ESA 加速域名:
不难看出,每个子域名都单独添加一次。
由于业务日渐增多,该方式会相当 crazy。
阿里云权威解析 DNS 记录值:
与 ESA 加速记录相似,每个子域名都单独添加一次。
如:
www.qiqinb.com
CNAME 指向:
www.qiqinb.com.a1.initpp.com
价格(成本)问题
由于 ESA 免费版 规则数量太少、几乎无法使用,
所以我这边选择了 ESA 基础版(约 59 元/年),虽然已经很 cheap,
但每个月赠送的 50G 流量,几乎只会用掉 10-20GB。
这样导致成本较高,且挺浪费的。
三、新架构详解
首先,上面的旧架构肯定是没有错的。
但是,旧架构不怎么优雅,并且扩容很麻烦。
1、解决价格问题
我们利用 腾讯云 EdgeOne 免费版,实现网站的免费加速。(非广!!!)
因为,首先,付费版最低档 100 元/年,成本高昂(当然如果你是富豪当我没说)
其次,我们普通的个人网站没有必要追求那么高的 SLA。
根据社区反馈,免费版确实偶尔会 boom 一下,但是不重要。
当然,如果你曾经拿到了免费版套餐兑换码,还可以有额外的套餐。
https://cloud.tencent.com/act/pro/eo-freeplan
https://cloud.tencent.com/act/pro/edgeone_anniversary
https://cloud.tencent.com/act/pro/eofreeplan-baota
https://cloud.tencent.com/act/pro/eo-clawscan
2、解决加速域名冗杂问题
我们利用 EdgeOne 的 通配符(泛域名)加速域名实现加速。
而 ESA 即便是基础版规则数量也只有 10 条, 完全不足以对每个子域名进行自定义规则。
我们在 EdgeOne 添加:@.qiqinb.com(即 qiqinb.com)*.qiqinb.com(匹配所有一级子域)
关于源站,我们填写一个最常用的源站即可。
相当于这就是一个 Default Rule,
如果有不一样的源站,去新增一个 Specific Rule,就能把这条 Default Rule 给 override 掉。
该方法可使得很大一部分网站不需要额外配置 Specific Rule。
当然,建议使用 源站组,这样可以批量修改默认源站。
如图,我这边填写的是我集群其中一个 Server 的 IPv4。使用 HTTP:80 回源。
比如 OpenList 需要回源 5244、Cloudreve 需要回源 5212 等等,
就只需要去 站点加速 / 规则引擎 添加一个新的 Specific Rule,将默认的 HTTP:80 回源给 override 掉。
如图,我维护了一个我的 业务 List,可以按照该列表来配置 Rules。
规则:@ 重定向至 www

规则:www 强缓存
但是我们可以通过一些非官方的诡异的办法曲线救国:
比如,我们添加了 *.qiqinb.com,而想为 www.qiqinb.com 单独配置一条规则。
如视频中所示,我们先在 GUI Mode 的匹配值中随便选择一个被允许的域名(如 qiqinb.com)
然后我们在保持下方规则完整的情况下,随后切换至 JSON Mode,
找到其中的 Condition 的表达式的数组,将刚才选择的任意域名(qiqinb.com)改为 www.qiqinb.com。
然后我们再切换回 GUI Mode,就发现匹配值已经变成了 www.qiqinb.com。
经过我实测,该方法是可以正常使用的。
效果:
其他的不再赘述,看图片。
规则:【Unicersal】强缓存

规则:【Universal】遵循源站缓存策略, 否则不缓存

规则:tools /api/* 不缓存

规则:space 静态资源文件强缓存 365d

顺序编排
由于 EdgeOne 规则引擎的 rules 执行顺序是依次往下,下方的 level 更高。
即如果同时 match 到多条 rules,下方 rule 的将 override 上方的 rule。
所以我们要把 Universal Rules 放在最上面,Specific Rules 的 override 规则放下面
DNS 解析
那么说完了这一坨 CDN 规则,就到了 DNS 环节。
使用泛域名还有另外一个好处,那就是所有泛域名 CNAME 统一。
比如,*qiqinb.com 分配到了 3uzaoishbehh.qiqinb.com.eo.dnse2.com.
理论上,我们将 *.qiqinb.com 直接解析至 3uzaoishbehh.qiqinb.com.eo.dnse2.com. 即可。
但是,会存在以下问题:
1、回源:任意 Host 可能打到你的源站,可怜的源站容易被 Host 头攻击或者是缓存污染啥的。
2、运维:你翻日志还得筛选一下。因为会混杂很多的无关域名进你的日志,比如有人扫你 admin、啥的子域名。
3、DNS 记录:泛 CNAME 与其他记录很容易就会发生冲突,比如我有一个子域名要单独 A 到某一个服务器 IP。
4、以及最重要的:3uzaoishb... 很难记住。。。如果要在外添加一个域名就比较麻烦了。
所以,我们应该只添加要用到的子域名 DNS 解析。
并且,我们可以手搓一个中级 CNAME(甚至可以开启展平,但我懒得搞了)
这里使用:
all.qiqinb.com.w.cdngslb.cn.
CNAME 指向:
3uzaoishbehh.qiqinb.com.eo.dnse2.com.所以,我们只需要将所有需要用到的子域名,
解析至 all.qiqinb.com.w.cdngslb.cn.
四、测试
为了验证该架构的可行性,以及避免影响 qiqinb.com 线上业务(其实也没啥业务)
我们单独拿一个域名进行测试:cdnpan.cn。
首先在 EdgeOne 添加一个站点,配置好根域名以及通配符加速域名。
然后,添加 DNS 记录。
可以看到,我这里添加了:
cdnpan.cn 用于测试根域名
www.cdnpan.cn 用于测试通配符域名
www-nocache.cdnpan.cn 用于测试差异化规则
经过测试,通过很繁琐的规则配置,可以实现上述效果。