Zstd(Zstandard), Facebook(Meta)开发的开源无损数据压缩算法,2016 年发布, “高性能+高压缩比”的平衡——既比传统压缩算法(如 Gzip、Deflate)压缩更快、压缩率更高,也比同级别高压缩比算法(如 LZMA)速度更快,同时支持可配置的压缩级别(1-19,级别越高压缩率越高但速度越慢),还提供“快速模式”(级别 -1 到 -13)满足低延迟场景。
测试环境:Debain 13 Nginx1.31.0
I 编译最新的Zstd库
# 安装编译工具
sudo apt install build-essential git libpcre3-dev zlib1g-dev libssl-dev debhelper
sudo apt remove libzstd-dev libzstd1
# 1. 进入源码存放目录
cd /usr/src
# 2. 克隆 Facebook Zstd 官方主分支源码
sudo git clone --depth 1 https://github.com/facebook/zstd.git
cd zstd
# 3. 编译并安装(核心库编译非常快)
sudo make -j$(nproc)
sudo make install
# 4. 刷新系统的动态链接库缓存,让系统认出刚刚安装的最新 libzstd.so
sudo ldconfig
II 编译zstd-nginx模块
# 1. 下载并解压 Nginx 1.31.0 官方源码
sudo wget http://nginx.org/download/nginx-1.31.0.tar.gz
sudo tar -zxf nginx-1.31.0.tar.gz
# 2. 克隆 zstd-nginx-module 源码
sudo git clone https://github.com/tokers/zstd-nginx-module.git
# 3. 进入 Nginx 源码目录
cd nginx-1.31.0
# 4. 配置编译参数:通过包含路径,强行让它关联到我们刚才安装在 /usr/local/include 的最新 Zstd 头文件
sudo ./configure --with-compat \
--add-dynamic-module=/usr/src/zstd-nginx-module \
--with-cc-opt="-I/usr/local/include" \
--with-ld-opt="-L/usr/local/lib -Wl,-rpath,/usr/local/lib"
# 5. 仅编译模块
sudo make modules
III 载入zstd模块
# 1. 覆盖复制到 Nginx 模块目录
sudo cp objs/ngx_http_zstd_filter_module.so /usr/lib/nginx/modules/
sudo cp objs/ngx_http_zstd_static_module.so /usr/lib/nginx/modules/
2. 赋予标准权限
sudo chmod 644 /usr/lib/nginx/modules/ngx_http_zstd_*.so
打开 /etc/nginx/nginx.conf,在最顶部添加加载指令:
# 引入 Zstd 动态过滤和静态加载模块
load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;
user www-data;
worker_processes auto;
IV 修改网页配置
以Flarum 为例
zstd on;
zstd_comp_level 3; # 动态压缩推荐级别 3(1-5 之间性能与压缩率平衡最佳,最大为 22)
zstd_min_length 256; # 小于 256 字节的文件不压缩
zstd_buffers 16 8k;
# 允许 Nginx 直接读取预先压缩好的 .zst 静态文件(如果存在)
zstd_static on;
# 精准针对 Flarum 的 API、JS 和各种文本格式进行 Zstd 压缩
zstd_types
text/plain
text/css
text/javascript
application/javascript
application/json
application/xml
application/rss+xml
application/atom+xml
application/vnd.api+json
image/svg+xml
image/x-icon;
#检查配置文件,重启Nginx
nginx -t
systemctl reload nginx
在线检测:https://zstd.wcode.net
按下 F12 打开开发者工具,前往 Network(网络) 面板。
Content-Encoding: zstd
Vary: Accept-Encoding
表明 Nginx 1.31.0 已经成功部署了目前业界公认在动态生成场景下处理效率极高、对 CPU 压迫极小的 Zstd 压缩引擎!