在web应用中,为了节约流量,降低传输大小,提高传输效率,一般都会对传输数据进行压缩。Nginx 自带的是 gzip 压缩,但还有一种更高效的压缩方式,即 Brotli。

Brotli 介绍

Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

使用Brotli替换Deflate(gzip)来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。

Brotli 的浏览器支持

  • Mozilla Firefox在Firefox 44中实现Brotli。
  • Google Chrome从Chrome 49开始支持Brotli。
  • Opera从Opera 36开始支持Brotli。

主流的浏览器都是支持Brotli的

Nginx 配置 Brotli

接下来,将为centos上的nginx服务器配置Brotli压缩。

安装依赖

确认机器上安装了Git。Git安装可参考:

安装 ngx_brotli

ngx_brotli 已内置 libbrotli,所以不需要编译 libbrotli。

cd /usr/local/src/
git clone https://github.com/google/ngx_brotli
cd ngx_brotli/deps
rm -rf brotli
git clone https://github.com/google/brotli
cd ../
git submodule update --init

下载 & 编译安装 Nginx

关于安装 Nginx 请见:

唯一需要注意的是,我们需要在配置时添加 --add-module=/usr/local/src/ngx_brotli

./configure --add-module=/usr/local/src/ngx_brotli 其他配置项

更改配置文件

在 nginx.conf 的 server 中,添加以下配置:

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

检查安装

F12打开 Networks 标签,看到接收头中包含 content-encoding:br,网络消耗也减少了。