UnZstd#

O módulo unzstd descomprime respostas do backend comprimidas com Zstandard (Content-Encoding: zstd) para clientes que não aceitam essa codificação. Assim, o backend pode armazenar seus dados comprimidos, economizando espaço em disco e E/S, e todos os clientes ainda recebem uma resposta que conseguem ler.

Instalação#

Para instalar o módulo, use um dos seguintes pacotes:

  • Angie: angie-module-unzstd

  • Angie PRO: angie-pro-module-unzstd

Diretivas#

O módulo fornece as seguintes diretivas:

  • unzstd — similar a gunzip

  • unzstd_buffers — similar a gunzip_buffers

  • unzstd_force — descomprime as respostas mesmo para clientes que aceitam Zstandard

  • unzstd_dict_file — define o arquivo de dicionário para respostas comprimidas com um dicionário Zstandard; permitida somente no contexto http

Carregando o módulo#

Para usar o módulo, ele deve ser carregado no contexto main{}:

load_module modules/ngx_http_unzstd_filter_module.so;

Exemplo de configuração#

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

Demonstração#

Vamos comprimir o arquivo de teste sample.txt com o utilitário zstd e colocar o resultado onde o backend o serve:

$ 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

Se o cliente suportar Zstandard, ele receberá o arquivo comprimido sem alterações:

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

$ wc -c received.zst
361662 received.zst

Se o cliente não suportar Zstandard, o módulo unzstd descomprimirá o arquivo antes de enviá-lo:

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

$ wc -c received.txt
1500092 received.txt

O arquivo received.txt contém o texto original de 1500092 bytes, idêntico a sample.txt, e não os dados comprimidos de 361662 bytes.

Informações adicionais#

Versão: 658990e

Documentação detalhada e código-fonte estão disponíveis em: HanadaLee/ngx_http_unzstd_filter_module