Unbrotli#

unbrotli 模块旨在为不支持 Brotli 压缩方法的客户端解压来自后端的响应(Content-Encoding: br)。在后端以压缩形式存储数据可以节省空间时,这尤其有用。

Directives#

该模块提供以下指令:

Loading the Module#

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

load_module modules/ngx_http_unbrotli_filter_module.so;

Configuration Example#

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

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

# Backend
server {
    listen 8080;
    location /storage {
        root   /usr/share/angie;
        rewrite ^(.*)$ $1.br break;  # 返回带有 .br 后缀的压缩文件
        add_header Content-Encoding br; # 在响应头中指示 Brotli 压缩
    }
}

Demonstration#

让我们放置压缩的测试文件 war-and-peace.txt.br

$ ls -l /usr/share/angie/storage/
total 2292
-rw-r--r-- 1 root root 1115616 Feb 27 16:10 war-and-peace.txt.br

如果客户端支持 Brotli,它将接收未解压缩的压缩文件:

$ curl -s -H 'Accept-Encoding: br' -o tmp/war-and-peace.txt localhost/storage/war-and-peace.txt

$ ls -l tmp/
total 1092
-rw-r--r-- 1 asv asv 1115616 Feb 27 16:36 war-and-peace.txt

如果客户端不支持 Brotli,unbrotli 模块将在发送之前在服务器上解压缩文件:

$ curl -s -o tmp/war-and-peace.txt localhost/storage/war-and-peace.txt

$ ls -l tmp/
total 3284
-rw-r--r-- 1 asv asv 3359405 Feb 27 16:39 war-and-peace.txt

该文件在发送到客户端之前已由服务器解压缩。

Additional Information#

详细文档和源代码可在以下网址获取: clyfish/ngx_unbrotli.