惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

kn007的个人博客

改进Nginx在支持时返回webp的逻辑 聊聊博客以及我个人近况 Nginx尝试返回webp版本的图片给浏览器 老歌单曲推荐:汤宝如《缘分的天空》 Fedora下关于OpenDKIM、OpenDMARC的配置实例 Fedora快速配置Postfix并挂载OpenDKIM、OpenDMARC Nginx SSL配置杂谈 服务器系统更新至Fedora Server 44 雅黑PHP探针 For PHP 8 2024年的尾巴,冒泡推歌 7月末,闲聊一些想法 MySQL 8.0.34对其自带身份验证标记弃用 怀旧粤语音乐分享 聊现今对博客的看法 聊聊对Lua Nginx Module的看法 聊聊过去一年的瞎折腾-杂项篇 聊聊过去一年的瞎折腾-电脑篇 聊聊Nginx 1.25和HTTP/3 使用acme.sh和acme-dns申请Google免费泛域名SSL证书
Nginx使用Zstd压缩传输
kn007 · 2026-07-15 · via kn007的个人博客

这篇文章本来早就该出来的,早在2024年初,我就已经使用了zstd-nginx-module,但当时它与ngx_brolti的兼容不是很好,且浏览器几乎没有支持的(只有Chrome开发版支持),便放弃了。

而如今2026年了,原始项目tokers/zstd-nginx-module自2024年后可以说是没有任何更新的,包括一些问题也一直没有得到解决,比如与google/ngx_brotli的部分兼容问题,其实在zstd-nginx-module Issue #40zstd-nginx-module PR #44等早已有说法及修复,但一直没有Merge,也没有答复。

目前该项目有两个不同的分支(Fork)在维护(一个是由eilandert创建,另外一个是由hsw创建),我目前选择的是eilandert创建的myguard-labs/nginx-zstd-module这个fork,他俩的fork分别对原项目进行较多的fix,目前也有针对原始项目提交Pull request(eilandert的PR更完整些),但暂未获批准。

eilandert的这篇关于zstd-nginx-module导读文章比较有意思,大家可以看一下,传送门

编译上,只要保证zstd模块比brolti模块晚加载就行了(这是Nginx的特性,无论是否为动态模块。其实按照PR内容来看,应该无所谓了,但还是照规矩来吧)。对于Nginx的Zstd参数,我的设置是:

zstd                    on;
zstd_static             on;
zstd_comp_level         5;
zstd_types              text/plain text/css text/csv application/json application/x-ndjson application/json-seq application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/atom+xml application/ld+json application/manifest+json application/problem+json application/rss+xml application/vnd.api+json application/xhtml+xml application/wasm text/wgsl font/ttf font/otf application/x-font-opentype application/x-font-ttf application/vnd.ms-fontobject image/x-icon;

压缩等级其实你可以选择到6,收益是比较高的。但因为我现在用的VPS的宿主机CPU是Sandy Bridge E5-2670,并不支持AVX2、BMI2指令集,只支持第一代AVX。没有BMI2,zstd代码还有优化,但不支持AVX2,就比较伤了,优势对比brolti小了不少。这也是我多次测试后,设置到Level 5(6的话负收益)。

目前为了在E5-2670更好的使用,Brolti压缩的平衡点选择的是Level 4(默认值为6,Cloudflare据说也是使用Level 6)。但即便是面对Brolti 4,Zstd 5也有很大的优势,最主要的是zstd对于压缩和解压缩都比较友好,压缩上服务器的CPU占用Zstd比起Brolti是要低的(虽然极限压缩上,大小对比br没有优势)。

首先根据我的测试结果,Zstd 6后的文件大小就跟Brolti 4压缩后大小相差无异了,或者说互有上下。但在CPU占用上,Zstd 6压缩比Brolti 4压缩占用少10%以上,压缩速度是Brolti 4的1.5倍,在现代CPU的情况下。

而Zstd 5的情况下,压缩后大小比Brolti 4稍大(不超5%),在CPU占用上,压缩比Brolti 4占用少40%左右(如果是SandyBridge的话,少15%),压缩速度是Brolti 4的2倍有多(如果是SandyBridge的话,快近50%)。

所以测试完后,就突然觉得Zstd很香,特别在我Level 5的设置下,明显感觉到TTFB更短了。这也是在有Brolti的情况下,还考虑Zstd的支持的原因。然后就有了文章开头的故事。

至于你说,那我为什么不直接Brolti 3,Brolti 3的压缩率只能说对比GZIP来说要好,Zstd 4就比他要小要快还要占用少(小一点点,快近2.5倍,占用少60%左右)。只能说Brolti的压缩等级还不够细,不能满足老CPU的极致调优(虽然可能并没有什么用,比如换掉Wordpress、换掉PHP的收益,比抠这个来的收益要高)。

还有如果你是现代CPU,且用着Brolti 6,如果日常无感的话,Zstd你可以设置到10,比Brolti 6要快2倍以上吧,占用少30%左右,大小的话,比它小一些。


让Gemini根据文章内容为本篇文章生成了题图,似乎还可以。

转载请注明转自: kn007的个人博客 的《Nginx使用Zstd压缩传输