Zstandard (zstd)#

该模块为响应添加了对 Zstandard 压缩的支持,支持动态压缩(实时)和静态压缩(预压缩文件)。与 gzip 相比,zstd 在相同或更好的压缩比下提供更高的压缩和解压速度。

模块由两个组件组成:

  • http_zstd_filter — 用于动态压缩响应;

  • http_zstd_static — 用于处理预压缩的文件。

加载模块#

main{} 上下文中加载模块:

load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;

配置示例#

server {
    listen 80 default_server;

    zstd_types text/plain text/css;
    zstd_min_length 256;         # 最小压缩响应体积
    zstd_comp_level 3;           # 压缩等级(1–22)

    # 静态文件动态压缩
    location / {
        zstd on;
        root /usr/share/angie/html;
    }

    # 后端响应动态压缩
    location /bk/ {
        zstd on;
        proxy_pass http://127.0.0.1:8081/;
    }

    # 提供预压缩的 .zst 文件
    location /static/ {
        zstd_static on;
        root /usr/share/angie;
    }
}

server {
    listen 8081;
    location / {
        root /usr/share/angie/html;
        index index.html;
    }
}

工作原理#

可以同时启用动态压缩 (zstd on) 和静态压缩 (zstd_static on)。此时,服务器会优先查找对应的预压缩文件(.zst),若未找到,则会进行动态压缩。

只有在请求头中包含 Accept-Encoding 且支持 zstd 时才会启用压缩,例如:

Accept-Encoding: gzip, zstd

若成功压缩或找到预压缩文件,响应中会添加以下头部:

Content-Encoding: zstd

更多信息#

详细文档与源代码请见: tokers/zstd-nginx-module