Nginx 使用 Brotli 压缩算法,Better than Gzip Compression
本文最后更新于 2630 天前,其中的信息可能已经有所发展或是发生改变。

google/ngx_brotli 的最新版已经无需安装额外依赖(bagder/libbrotli),查阅新版教程:https://bbs.mf8.biz/ngx_brotli/

介绍

Brotli 在瑞士德语中的意思是小面包(真·吃货·谷歌 啊)。Brotli 是一个通用目的的无损压缩算法,它通过用变种的 LZ77 算法,Huffman 编码和二阶文本建模进行数据压缩,是一种压缩比很高的压缩方法。在压缩速度上跟 Deflate 差不多的同事却实现了更密集的压缩,对 Canterbury 资料库的压缩密度好于 LZMA 和 bzip2。

目前 Brotli 已经广泛的用户 CDN 加速项目,例如 Cloudflare 和 CDN77 均有部署。

下面将介绍如何在 Nginx 上应用此项目

安装

Brotli 的实现需要用到如下三个库,google/brotli 包含在 bagder/libbrotli 中。

google/brotli
google/ngx_brotli
bagder/libbrotli

一、首先安装 brotli 和 libbrotli 

git clone https://github.com/bagder/libbrotli 
cd libbrotli 
./autogen.sh 
./configure 
make && make install 

二、安装 ngx_brotli,重新编译 Nginx 或者 Openresty,在末尾加上 ./configure --add-module=/path/to/ngx_brotli 即可

例如,

cd /tmp
git clone https://github.com/google/ngx_brotli.git

# 已经下载好 ngx_brotli 了

cd nginx-1.11.3
./configure --add-module=/tmp/ngx_brotli 

三、编辑 nginx.conf 文件,在http配置段增加以下配置

brotli on; 
brotli_comp_level 6; 
brotli_buffers 16 8k; 
brotli_min_length 20; 
brotli_types *; 

(可选)四、反代禁用 gizp,反代 node.js 应用,如果他们启用了 gzip 了,他们在反代的地方就要添加:

proxy_set_header Accept-Encoding ""; 

五、重启 Nginx

service nginx restart

如果提示:

nginx: error while loading shared libraries: libbrotlienc.so.1: cannot open shared object file: No such file or directory

那么 SSH 中输入:

ldconfig

即可解决。

上一篇
下一篇