ngx_http_unzstd_filter_module is a filter that decompresses responses with “Content-Encoding: zstd” for clients that do not support “zstd” (Zstandard compression) encoding method. The module will be useful when it is desirable to store data compressed to save space and reduce I/O costs.
This Nginx module is currently considered experimental. Issues and PRs are welcome if you encounter any problems.
Known Issue:
- Due to improper handling of zstd library dependencies, this module needs to be built together with zstd-nginx-module. I am currently unable to solve this problem. Welcome to submit PR.
- This module occasionally has a problem of sending the chunked end marker (0\r\n\r\n) twice when decompressing chunked responses. I can't fix it at the moment, so I have to temporarily disable this module. If you are interested in this module, you can try to solve it, and your PR is welcome.
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
# enable zstd decompression for clients that do not support zstd compression
unzstd on;
proxy_pass http://foo.com;
}
}
To use theses modules, configure your nginx branch with --add-module=/path/to/ngx_http_unzstd_filter_module
. Several points should be taken care.
- You can set environment variables
ZSTD_INC
andZSTD_LIB
to specify the path tozstd.h
and the path to zstd shared library represently. - static library will be tried prior to dynamic library, since this Nginx module uses some advanced APIs where static linking is recommended.
- System's zstd bundle will be linked if
ZSTD_INC
andZSTD_LIB
are not specified.
Syntax: unzstd on | off;
Default: unzstd off;
Context: http, server, location
Enables or disables decompression of zstd compressed responses for clients that lack zstd support.
Syntax: unzstd_force string ...;
Default: -
Context: http, server, location
Defines the conditions for forced brotli decompression. If at least one value in the string parameter is not empty and not equal to "0", forced zstd decompression is performed. But it will not try to decompress responses that do not contain the response header Content-Encoding: zstd.
Syntax: unzstd_buffers number size;
Default: unzstd_buffers 32 4k | 16 8k;
Context: http, server, location
Sets the number and size of buffers used to decompress a response. By default, the buffer size is equal to one memory page. This is either 4K or 8K, depending on a platform.
Hanada [email protected]
This module is based on ngx_http_gunzip_module, one of nginx core modules and ngx_unbrotli, a nginx module for brotli decompression.
This Nginx module is licensed under BSD 2-Clause License.