崩溃

刚搭建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.

我是个失败的运维,半年才发现有问题。

修复

现在我有两类资源要解决:

  1. 开源资源;
  2. 本地资源。
    二者都使用了jsDelivr

开源资源

jsDelivr引用的开源资源格式一般为:https://cdn.jsdelivr.net/npm/……,可以直接用https://unpkg.com/ 替换 https://cdn.jsdelivr.net/npm/
不过unpkg貌似是建在CloudFlare上,最近的服务器在香港,于是更进一步,用https://npm.elemecdn.com/来替换,这是饿了么的国内镜像,速度更快,只是不知道稳定性如何,观察看看吧。

本地资源

简单几种方案(一定有更佳的,但是能力有限):

  1. 最稳妥的就是花钱,付费让服务稳定;
  2. Gitee作为白撸GitHub + jsDelivr的替代品;
  3. 把引用的CSS文件JS文件图片都转移到七牛云七牛云作为整体CDN解决方案;
  4. 懒得搞了,摆烂吧……

替代品1: Gitee

Gitee可用,方法是:

  1. GitHub的CDN仓库同步到Gitee上;
  2. https://gitee.com/用户名/仓库名/raw/mian/文件路径替代原来的https://cdn.jsdelivr.net/gh/用户名/仓库名/文件路径

如果外站无法访问,大概是因为Gitee默认私有库,需要申请开源,审核通过后才能用,这个有点慢,我等不及了,还是用七牛云吧。

替代品2: 七牛云

七牛云就简单多了,与优雅地在 Blog 中使用图床这里的操作别无二致。
如果等不及缓存失效,可以在这里对文件或目录手动刷新。

搞定