引言

GFW现在是越来越优秀了,前一段时间还能正常访问的jsdelivr,现在发现全被干了。上网开搜才知道,原来jsdelivr在2022年初就因为备案方面问题,已经陆续被污染了,国内幸存能访问的地方不多(刚好博主这能访问,就一直挂着加速)。今天没挂旁路由访问网站,才发现原来所有用到cdn.jsdelivr.net加速的图片都打不开,已经全部被干完了,急需一个替代品。发现网上有文章介绍说用Vercel反代jsdelivr效果不错,就急吼吼的跟着搞,结果差点就搞崩了。

原来不只jsdelivr挂了,Vercel其实在更早的时间已经被污染了,国内早就打不开。这一顿操作下来,差点就成了无用功。

幸好,Vercel是支持自定义二级域名,这就像当初 cloudfare 的 worker 被墙,也是通过定义二级域名解决了被墙的命运。

最终,还是先通过CF套给二级域名一层CDN,然后在Vercel添加二级域名访问,Vercel再对jsdelivr进行反代,从而实现了江湖救急。

不然本博客,从之前配置的方案【[Typora编辑 + PicGo上传 + Github作图床的实现办法]】(https://www.zctou.com/2046.html)以后一直都是用的github作图床,jsdelivr来加速。一旦失去了jsdelivr这中间商,又不知道要有多大修改的功程量。

步骤:

前面说了,要实现Vercel反代jsdelivr,要先搞定Vercel方面的设置问题。

一、注册并部署Vercel

1. 注册Vercel

官网:https://vercel.com

可Github注册,也可邮箱注册。博主用的是gmail注册,据说用qq邮箱注册会注册不成功,可自测。

注册过程就几个简单的点击,外加一个简单的email认证,就不再赘述了。

注册的时候要选免费的plan,也就是hobby这计划每月100G的流量,对一般小破站来说足够了。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

2. 部署Vercel

2.1 下载并安装nodejs

要部署 vercel,需要在本地先下载nodejs并安装。这里的测试机为windowns 10 PC

nodejs下载地址:https://nodejs.org/zh-cn/

2.2 创建反代json配置文件

本地随便一个位置建个新文件proxy.json(文件所在路径最好不含中文)。博主这里路径是E:\cdn\proxy.json

文件反代配置为:

{
  "version": 2,
  "routes": [
    {"src": "/(.*)","dest": "https://cdn.jsdelivr.net/$1"}
  ]
}

里论上,可以反代任何网址,只需要将上面的https://cdn.jsdelivr.net改为你想要反代的URL即可,自测。

2.3 安装Vercel CLI(连接Vercel帐号用)

进带有proxy.json文件夹,调出cmd命令窗口,如下图:

直接在路径位置输出cmd+【Enter】,即可直接打开cmd命令窗口,并跳转到相应路径。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

利用命令npm i -g vercel安装 Vercel

npm i -g vercel

2.4 登录Vercel 并部署

A.登录 Vercel 帐号

CMD中,使用命令vercel login

vercel login

登录时要邮件确认。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

去邮箱确认后,CMD这边显示登入成功

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

B.登录成功后部署

使用命令vercel -A proxy.json --prod,往vercel帐号上部署反代的project.

如果当然路径不在e:\cnd,可指定绝对路径:vercel -A E:\cnd\proxy.json --prod

下图是之前测试时截取的,经测试,部署里会生成.vercel.gitignore文件,最好放进文件夹里,如cdn文件夹,方便管理。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

只有是否连接到已有的project时选no,并改名,其他选项直接Enter即可。

2.5 查看效果

进后台:https://vercel.com/dashboard

即可查看并修改刚才部署的项目。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

二、添加独立域名(二级域名)

本来麻,事情到这就完事了,可以用vercel给的二级域名访问,格式是这样的:

cdnjsdzct.vercel.app

然而文章开头已经说过了,vercel.app早就挂了,国内是完全没法访问的

本来操作到这一步,博主以为vercel这反代方法要挂了。

后面没想到的是,他也支持绑定独立域名,而且是二级域名,这就有了一线第生机。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

这时候,你就得像之前操作worker.dev一样,为其指定一个独立的域名了(这里选的是二级域名)。

后台找到你的project,点进去,找到 Settings,点击Domains

右边有个 add选项,添加你自己的二级域名,即可。

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

刚添加的时候,肯定会报错的

然后会有红字提示你,接下来要把二级域名的cname指定到cname.vercel-dns.com

按照他提示的配置,去cloudfare 配置域名解析即可

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

三、Cloudfare配置cname指向 vercel

至此,基本已经完成了为vercel添加独立域名反代jsdelivr的配置,剩下的就是去Cloudfare配置个cname指向即可

(功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

注意开启小云朵。

配置都正确完成后,vercel控制面板即会刷新,不再有红字提示

提示为,要等段时间能生效:

Good news! Your DNS records are set up correctly, but it can take some time for them to propagate globally.

清除浏览器缓存或换设备,即可测试出,反代成功。

这原操作其实就是worker的翻版,只要你的域名没被墙,就可以正常反代

当然了,就算这样设置反代成功,但定速度肯定比原来直接用jsdelivr加速github图片慢了不少,毕竟又兜了两圈。

四、批量更新博客图片地址

因为是网站的程序已经换到typecho,而且都采用的每三方图床,基本上只修改contens数表足以。

登录VPS,进行mysql数库容器,用命令批量更新旧连接为新链接即可。

针对typecho,更新命令为 :

UPDATE `typecho_contents` SET `text` = REPLACE(`text`,'旧地址','新地址');

除了typecho_contents表,你可能还要更新的表有:

  1. typecho_fields
  2. typecho_options

更新步骤如下:

  • 1.使用docker-ps'找到数库库容器名。
    (功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)
  • 2.使用docker exec -it typecho-db /bin/sh 进入数据库容器。
  • 3.使用mysql -u root -p,登入数据库,就是数据库的帐号与密码。
    (功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)
  • 4.选择typecho数据表
    (功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)
  • 5.使用命令更新

    UPDATE typecho_contents SET text = REPLACE(text,'https://cdn.jsdelivr.net/gh/','https://cdnzct.zctou.com/gh/');

    (功能解决)cdn.sdelivr.net国内被污染,利用Vercel反代jsdelivr(要自定义域名)

总结:

既然vercel能成功用二级域名反代cdn.jsdelivr.net,那么用肯定用cf的worker也一样能反代成功,其实现原理都一样的。

扩展阅读:之前用worker反代v2ray也是大差不差不思路

Better cloudflare ip + worker 提高科学上网速度

只是这种设置方法只能暂时用来应应急,应付应付小破站,以后还是要换cdn加速的。

毕竟jsdelivr被墙早有前科,以后也大概率不会被放出来。