UnZstd#

unzstd 模块用于为不接受 Zstandard 编码的客户端解压来自后端使用 Zstandard 压缩(Content-Encoding: zstd)的响应。这样,后端就可以压缩存储数据,从而节省磁盘空间和 I/O,同时每个客户端仍能收到可读取的响应。

安装#

要 安装 该模块,请使用以下软件包之一:

  • Angie:angie-module-unzstd

  • Angie PRO:angie-pro-module-unzstd

指令#

该模块提供以下指令:

  • unzstd — 类似于 gunzip

  • unzstd_buffers — 类似于 gunzip_buffers

  • unzstd_force — 即使对接受 Zstandard 的客户端也解压响应

  • unzstd_dict_file — 设置用于解压使用 Zstandard 字典压缩的响应的字典文件;仅允许在 http 上下文中使用

加载模块#

要使用该模块,必须在 main{} 上下文中加载它:

load_module modules/ngx_http_unzstd_filter_module.so;

配置示例#

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

    location /storage {
        unzstd on;
        proxy_pass http://127.0.0.1:8080;
    }
}

# Backend
server {
    listen 8080;
    location /storage {
        root   /usr/share/angie;
        rewrite ^(.*)$ $1.zst break;  # Return the compressed file with .zst suffix
        add_header Content-Encoding zstd; # Indicate Zstandard compression in the response header
    }
}

演示#

让我们用 zstd 工具压缩测试文件 sample.txt,并将结果放到后端提供文件的位置:

$ zstd -19 sample.txt -o sample.txt.zst
sample.txt           : 24.11%   (  1.43 MiB =>    353 KiB, sample.txt.zst)

$ sudo mkdir -p /usr/share/angie/storage
$ sudo cp sample.txt.zst /usr/share/angie/storage/
$ wc -c /usr/share/angie/storage/sample.txt.zst
361662 /usr/share/angie/storage/sample.txt.zst

如果客户端支持 Zstandard,它将原样接收压缩文件:

$ curl -s -H 'Accept-Encoding: zstd' -o received.zst localhost/storage/sample.txt

$ wc -c received.zst
361662 received.zst

如果客户端不支持 Zstandard,unzstd 模块将在发送前解压文件:

$ curl -s -o received.txt localhost/storage/sample.txt

$ wc -c received.txt
1500092 received.txt

文件 received.txt 保存的是原始的 1500092 字节文本,与 sample.txt 相同,而不是 361662 字节的压缩数据。

附加信息#

版本: 658990e

详细文档和源代码可在以下位置获取: HanadaLee/ngx_http_unzstd_filter_module