前言

Jsdelivr在今天因DNS污染挂了一段时间,而几个月前也挂过,而且在Jsdelivr有国内ICP备案时就也会偶尔抽风,自从去年Jsdelivr的ICP备案掉了后国内的访问请求就全部由Cloudflare和Fastly承担了。而Even主题用到的js、css大多只挂在npm上而不需要用到GitHub上的资源,想想看,还是决定把Even主题默认的Jsdelivr CDN换了,改成unpkg.com的CDN。本文就是介绍Even主题更换cdn时的坑。

注:我使用的Even主题版本为4.0.0,新版可能修复了这些问题。

修改步骤

1. 修改config.toml

找到config.toml其中的params.publicCDN项,将所有的cdn.jsdelivr.net/npm替换为unpkg.com,不过替换完这一处只是部分js的cdn改变了。如果你有在使用Gitalk的话你就会发现怎么Gitalk还是从jsdelivr加载。因此我们还要进行第二步。

2. 修改comments.html

找到主题文件夹下的layouts\partials\comments.html文件,将有Gitalk注释下的代码由

1
2
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js" crossorigin="anonymous"></script>

替换成

1
2
<link rel="stylesheet" href="https://unpkg.com/gitalk@1/dist/gitalk.css" crossorigin="anonymous">
<script src="https://unpkg.com/gitalk@1/dist/gitalk.min.js" crossorigin="anonymous"></script>

即可,本质上就还是将cdn.jsdelivr.net/npm这一套替换成unpkg.com

3. 修改head.html

在comments.html的同一个文件夹中能找到head.html,将此文件中的

1
2
3
4
{{ `<!--[if lt IE 9]>
  <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->` | safeHTML }}

替换为

1
2
3
4
{{ `<!--[if lt IE 9]>
  <script src="https://unpkg.com/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
  <script src="https://unpkg.com/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->` | safeHTML }}

完成。

后记

虽然现在jsdelivr重新从墙里放出来了,但不能保证后续jsdelivr不会再次被墙,目前来看最稳妥的方式还是换个cdn。

20220523更新

确实jsdelivr的cdn子域名又被墙了,不过测试发现fastly子域名没有,因此写了个Nginx配置,运行在本地,做301跳转,用以解决部分网站依赖jsdelivr CDN的问题,不过不是什么长久之计。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
server {
    listen 443 ssl;
    server_name cdn.jsdelivr.net;

    ssl_certificate ca/rewrite.crt;
    ssl_certificate_key ca/Rewrite.pem;

    rewrite ^/(.*) https://fastly.jsdelivr.net/$1 permanent;

    add_header Access-Control-Allow-Origin '*';
}

同时HOSTS文件中也要填入

1
127.0.0.1 cdn.jsdelivr.net

其中的ssl证书需要用户自行签发,我这就不提供了。可以搜索openssl自签证书或者用本博客之前提到过的XCA来管理证书。

20220624更新

cdn.jsdelivr.net 又从墙里出来了,不过是不建议再用了。Gooreplacer扩展也可以做到20220523更新提到的内容,具体配置如下图。