UnZstd#

Модуль unzstd распаковывает ответы бэкенда, сжатые методом Zstandard (Content-Encoding: zstd), для клиентов, которые не поддерживают это кодирование. Так бэкенд может хранить данные в сжатом виде, экономя место на диске и операции ввода-вывода, а любой клиент все равно получает ответ, который может прочитать.

Установка#

Для установки модуля используйте один из следующих пакетов:

  • 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;
    }
}

# Бэкенд
server {
    listen 8080;
    location /storage {
        root   /usr/share/angie;
        rewrite ^(.*)$ $1.zst break;  # Возвращаем сжатый файл с суффиксом .zst
        add_header Content-Encoding zstd; # Указываем сжатие Zstandard в заголовке ответа
    }
}

Демонстрация работы#

Сожмем тестовый файл sample.txt утилитой zstd и разместим результат там, откуда его отдает бэкенд:

$ 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