关于"反代"JSD这件事
起因
众所周知jsdelivr的加速出现了一些问题,导致速度并不会向当初那样。再此期间也尝试了各种奇淫技巧,例如:
- sw 前端竞速并缓存(参考于 ChenYFan)
- sw 前端竞速(参考于乐特)
- 白嫖 TianLi 的 CDN
但是用来用去给我的感觉并不像当初使用 jsdelivr 那种感觉舒服,例如 sw 同时发送大量请求,在我的"小破手机"中每次打开都会有一些卡顿;至于 TianLi 的 CDN,速度很舒服,不过终归是白嫖。我个人的观点可能也会像当初的晚风图床。
因此,我决定自己反代 JSD 实现自己个人使用的 CDN。
我的需求
- 个人使用,不希望别人使用
- 不存储源文件
- 访问不是自己定义的仓库(路径)则跳转某个地址
如何反代
对于上述需求,前两个很简单,防盗链加上后,也没啥好办法可以防护了;不存储源文件那么就依靠 CDN 的缓存即可。至于第三点则需要反代。
与其说是反代,其实我认为说是重写更合适。
首先我原本是想只部署在 vercel,利用其vercel.json
配置文件直接对路由进行定义及过滤实现我的需求。
将源站做好后就是 CDN,CDN 回源站设置为 vercel 的地址,并开启跟随重定向并打开 CDN 缓存即可。这里我设置的 CDN 缓存为跟随源站即跟随 JSD 的缓存设置。
至于为什么使用 vercel.json 配置文件,因为我认为这个需求使用其配置文件的redirects
即可。个人认为与其写程序去判断,不如直接在入口处判断方案。
大概配置文件参考如下:
1 | { |
以上表示,如果访问路径匹配/npm/kang-static(.*)
则将链接重定向到 jsd 响应的链接。
服务器&Workers
由于 vercel 在国外,因此使用国内 CDN 回源时会有一点点的速度慢。
例如:CDN 回源到 Vercel,在重定向到 JSD 则会出现两次链接,因此为了降低第一次链接的速度,我决定在腾讯云函数和轻服务部署试一试,顺便部署下 cf worker 作为备用使用。
在这个环境中无法像 vercel 那样 0 代码实现需要,因此只能小写一点代码实现部署。
代码参考仓库:jsd-proxy
弊端
包括但不限于以下几点
- 如果不套用那么就是减速器
- 关于缓存问题没有一个合理的刷新机制
- dogecloud 刷新 cdn 有每次次数限制