当CDN崩溃时
崩溃
刚搭建BLOG的时候,小小的研究了一下如何免费薅图床,并实际尝试了几种方式:七牛云
(详见:优雅地在 Blog 中使用图床)、GitHub + jsDelivr
,并最终选择了 GitHub + jsDelivr
——错误的源头。
GitHub + jsDelivr
是一种很取巧的方式。由于GitHub
的资源在各地区访问不一定稳定, jsDelivr
很贴心地为其自动、免费加速,使用方式也非常简单:https://cdn.jsdelivr.net/gh/GitHub用户名/GitHub仓库名@发布版本号/文件路径
即可轻松稳定地访问存储在GitHub仓库中的文件。直到大厦崩塌。
此后的半年时间里,jsDelivr
曾经崩溃过几次,但是基本可以在两天之内恢复,由于大量使用的Node.js
依赖也是从jsDelivr
引用,也就忍了。昨天我才知道,2021年12月20日开始,由于jsDelivr
在国内的ICP证书到期,没办法继续使用,彻底挂了。
Unfortunately today jsDelivr unexpectedly lost its ICP license in China. As effect the regional CDN disabled our account.
This resulted in the extended outage we had in mainland China and Taiwan.
Other regions were unaffected.
We understand how difficult it was for our users to experience this unique situation.
From now on all Chinese traffic will be served by “near China” locations provided by global CDN providers.
This will have the additional benefit of better failover logic in the future.
我是个失败的运维,半年才发现有问题。
修复
现在我有两类资源要解决:
- 开源资源;
- 本地资源。
二者都使用了jsDelivr
。
开源资源
从jsDelivr
引用的开源资源格式一般为:https://cdn.jsdelivr.net/npm/……
,可以直接用https://unpkg.com/
替换 https://cdn.jsdelivr.net/npm/
。
不过unpkg
貌似是建在CloudFlare
上,最近的服务器在香港,于是更进一步,用https://npm.elemecdn.com/
来替换,这是饿了么的国内镜像,速度更快,只是不知道稳定性如何,观察看看吧。
本地资源
简单几种方案(一定有更佳的,但是能力有限):
- 最稳妥的就是花钱,付费让服务稳定;
- 用
Gitee
作为白撸GitHub + jsDelivr
的替代品; - 把引用的
CSS文件
、JS文件
、图片
都转移到七牛云
。七牛云
作为整体CDN解决方案; - 懒得搞了,摆烂吧……
替代品1: Gitee
Gitee
可用,方法是:
- 把
GitHub
的CDN仓库同步到Gitee
上; - 用
https://gitee.com/用户名/仓库名/raw/mian/文件路径
替代原来的https://cdn.jsdelivr.net/gh/用户名/仓库名/文件路径
如果外站无法访问,大概是因为Gitee
默认私有库,需要申请开源,审核通过后才能用,这个有点慢,我等不及了,还是用七牛云
吧。
替代品2: 七牛云
七牛云
就简单多了,与优雅地在 Blog 中使用图床这里的操作别无二致。
如果等不及缓存失效,可以在这里对文件或目录手动刷新。
搞定