jsDelivr DNS 污染的解决方案

2022年4月28日,jsDelivr在中国大陆确认遭到DNS污染。

jsDelivr 官网已经出现错乱了

微信截图_20220602192535

img

然而,这个 jsDelivr 域名遭到DNS污染后,同时也影响到了我的博客,导致出现访问缓慢,一些样式也出了问题

微信截图_20220603003948

直到目前为止,cdn.jsdelivr.net 还是处于污染状态

微信截图_20220603024735


jsDelivr 的代替方案

1、官方子域

本次污染只针对cdn.jsdelivr.net这一个域名。jsDelivr有很多的CDN赞助商共同支持,每一个服务商都会有自己的专有子域名,通过替换访问资源到其他的二级域名可以恢复访问。但这些CDN普遍速度一般,而且前途并不明朗,建议仅供临时使用。

  • CloudFlare:test1.jsdelivr.net
  • CloudFlare:testingcf.jsdelivr.net
  • Fastly:fastly.jsdelivr.net
  • GCORE:gcore.jsdelivr.net

2、反向代理

如果一定要使用jsDelivr的资源的话,可以考虑通过NGINX反代cdn.jsdelivr.net这一个资源库自用。建议通过海外优化线路落地+国内中转缓存,不过要注意添加防盗链以及尽量隐藏反代路径,以防止被其他人滥用。具体配置这里给一个简单的范例,博主不是很推荐这样做,可靠性上很打折扣。

NGINX反代jsDelivr示例

1
2
3
4
5
6
7
8
9
10
11
#针对/gh目录的反代
location /gh
{
proxy_pass https://104.16.86.20;
proxy_set_header Host cdn.jsdelivr.net;
proxy_ssl_server_name on;
proxy_ssl_name cdn.jsdelivr.net;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}

3、切换国内静态库

推荐一些国内比较稳定、全面的静态资源库吧,其中不乏完全同步cdnjs内容的,可以逐步将静态资源替换过去。

字节静态库:cdn.bytedance.com
*完整同步了cdnjs的内容,通过自家CDN加速,缺点是没有海外节点而且链接比较凌乱。

360静态库:cdn.baomitu.com
*完整同步了cdnjs的内容,并且有提供Google fonts加速,通过自家CDN加速,前段时间启用了AWS CloudFront的海外节点,是目前国内公共CDN做的比较好的了。

七牛静态库:staticfile.org
*通过自家融合CDN加速,海外节点较少不过也表现尚可,缺点就是担心org域名后续备案维护的问题。