主机论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 169|回复: 7

分享一个nginx反代jsdelivr的优化配置

[复制链接]

118

主题

815

帖子

2372

积分

金牌会员

Rank: 6Rank: 6

积分
2372
发表于 2022-5-21 12:25:26 | 显示全部楼层 |阅读模式
jsdelivr主域名cdn.jsdelivr.net国内已经完全被墙了,虽然可以切换成fastly.jsdelivr.net,不过这个CDN走的是NTT线路,国内速度感动死,也不能保证以后不会被墙。也想过自建CDN公共库,但是自建还是没有直接反代jsdelivr简单。这个配置实现的是解析cdn.jsdelivr.net的域名与最近的CDN节点建立连接,然后nginx会缓存已经请求过的静态资源,不用再次请求jsdelivr,并让浏览器长久缓存静态资源,提高加载速度。
不要用良心云,套路云反代,有封鸡风险。
首先打开需要反代的域名的站点配置文件,在server前面先定义nginx缓存,

  1. proxy_cache_path /JsdelivrCache levels=1:2 keys_zone=jsdelivr:50m max_size=10g inactive=1200d
  2. use_temp_path=off;
复制代码


/JsdelivrCache表示缓存的路径为/JsdelivrCache,levels=1:2表示缓存是两级目录,第一级目录用1位16进制命名,第二级目录用2位16进制命名,keys_zone表示在共享内存中设置一块存储区域来存放缓存的key(url的hash值)和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;这里缓存的是自己站里静态资源不用设置一个很大的值。keys_zone"="后面加的jsdelivr是定义的缓存空间名字。
max_size:最大缓存空间,这里缓存的是占用空间小的的静态资源不用设置一个很大的值。
inactive:未被访问文件在缓存中保留时间,这里设置成1200天,nginx会删除指定时间内没有被缓存命中的缓存文件。缓存静态资源建议设置成一个很大的值。
搞定之后,打开反向代理配置
将宝塔自定义的配置改成如下代码

  1. location /
  2. {
  3.     proxy_pass https://cdn.jsdelivr.net;
  4.     proxy_set_header Host cdn.jsdelivr.net;
  5.     proxy_set_header X-Real-IP $remote_addr;
  6.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7.     proxy_set_header REMOTE-HOST $remote_addr;
  8.     proxy_http_version 1.1;
  9.     proxy_set_header Connection "";
  10.     proxy_ssl_server_name on;
  11.     add_header X-Cache $upstream_cache_status;
  12.     proxy_ignore_headers Set-Cookie Cache-Control expires;
  13.     proxy_cache jsdelivr;
  14.     proxy_cache_key $host$uri$is_args$args;
  15.     proxy_cache_valid 200  365d;
  16.     expires 365d;
  17. }
复制代码

注意proxy_cache后面的缓存名字必须和前面定义的缓存名字一致。
proxy_http_version 1.1;
proxy_set_header Connection "";
这两段表示使用http1.1协议与后端建立长连接可以避免反复开销连接降低速度,不设置会默认使用http1.0。
proxy_ssl_server_name on;代理ssl sni,这行必须配置,否则CDN会报错。
proxy_cache_valid 200  365d;  表示缓存状态码和过期时间,这里只缓存200的请求,并且缓存一年时间,1年之后缓存过期nginx会再次访问Jsdelivr,如果后端静态文件更新不频繁建议设置成一个较大的值,更新频繁缓存时间可以设置小一点。
expires 365d;这里是指让客户端浏览器缓存静态文件的时间,避免反复请求服务器,加快本地访问,这里设置成1年。同上,如果静态资源库的更新频繁建议设置为一个较小的值。
最后将你的网页前端源码中引用的cdn.jsdelivr.net全部替换成你的域名cdn.xxx.com,如果不想手动可以用VScode之类的代码编辑器,一键替换。




回复

使用道具 举报

43

主题

456

帖子

1427

积分

金牌会员

Rank: 6Rank: 6

积分
1427
发表于 2022-5-21 12:35:09 | 显示全部楼层
感谢分享。。我直接用BT反代的,打开了缓存,可以直接用我就没管了。。。用的是腾讯云。这个会封机? 有啥理由?
回复

使用道具 举报

77

主题

745

帖子

2235

积分

金牌会员

Rank: 6Rank: 6

积分
2235
发表于 2022-5-21 12:37:16 | 显示全部楼层
感谢分享,我也是腾讯云反代的。为什么会被封鸡 ?
回复

使用道具 举报

118

主题

815

帖子

2372

积分

金牌会员

Rank: 6Rank: 6

积分
2372
 楼主| 发表于 2022-5-21 12:41:43 | 显示全部楼层
jarvan 发表于 2022-5-21 12:35
感谢分享。。我直接用BT反代的,打开了缓存,可以直接用我就没管了。。。用的是腾讯云。这个会封机? 有啥 ...

涉嫌违反相关法律法规和政策
回复

使用道具 举报

43

主题

456

帖子

1427

积分

金牌会员

Rank: 6Rank: 6

积分
1427
发表于 2022-5-21 12:35:00 | 显示全部楼层
叼爆小朋友 发表于 2022-5-21 12:41
涉嫌违反相关法律法规和政策

这个相关 是指。。。总不能啥都相关了吧
回复

使用道具 举报

13

主题

849

帖子

2493

积分

金牌会员

Rank: 6Rank: 6

积分
2493
发表于 2022-5-21 12:44:48 | 显示全部楼层
其他CDN的库没有jsdelivr的全
还是反代好


回复

使用道具 举报

40

主题

524

帖子

1646

积分

金牌会员

Rank: 6Rank: 6

积分
1646
发表于 2022-5-21 12:41:00 | 显示全部楼层
感谢分享,使用中!
回复

使用道具 举报

583

主题

2076

帖子

5929

积分

论坛元老

Rank: 8Rank: 8

积分
5929
发表于 2022-5-21 12:45:26 | 显示全部楼层
mark
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2024-3-29 17:53 , Processed in 0.071711 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表