nginx集成brotli压缩算法
本文于2017年2月中旬完成,发布在个人博客网站上。
考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。
Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比。
在caniuse网站查询当前主流浏览器对brotli算法的支持程度,结果页面Brotli Accept-Encoding/Content-Encoding。很不幸,IE11并不支持该算法,与之相反,Chrome从49开始支持brotli算法。
安装
下载源码
从ngx_brotli下载ngx_brotli
的代码。ngx_brotli
编译时依赖brotli,但注意不能直接从brotli下载代码,否则编译时可能会出错。如果是手工下载代码,建议从ngx_brotli
代码路径deps目录下,点击brotli的代码标签,然后取该标签的代码。
编译
./configure --prefix=/home/jackie/software/nginx \
--with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2k \
--with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 \
--with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 \
--with-http_ssl_module \
--with-http_v2_module \
--with-threads \
--with-debug \
--add-module=/home/jackie/Downloads/nginx/ngx_brotli-master
make install
配置说明
指令介绍
ngx_brotli定义了如下指令:
-
brotli,是否允许动态压缩响应数据,可选值为
on
和off
,默认值为off
。样例如下:brotli on;
-
brotli_types,动态压缩启用时,允许压缩的MIME types,默认值为
text/html
。样例如下:brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
-
brotli_static,是否允许查找预处理好的、以
.br
结尾的压缩文件,可选值为on
、off
和always
,默认值为off
。样例如下:brotli_static off;
-
brotli_comp_level,压缩级别,可选值范围为0~11,默认值为6。样例如下:
brotli_comp_level 11;
-
brotli_buffers,压缩响应数据时使用的缓冲区的数量和大小。样例如下:
brotli_buffers 16 8k;
-
brotli_window,brotli使用的窗口值,默认值为512k。样例如下:
brotli_window 512k;
-
brotli_min_length,响应数据的最小长度,低于该值将不使用brotli算法执行压缩操作。brotli算法使用
Content-Length
来确定响应数据的长度。样例如下:brotli_min_length 20;
完整样例
http {
...
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_buffers 128 32k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
brotli on;
brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
brotli_static off;
brotli_comp_level 11;
brotli_buffers 16 8k;
brotli_window 512k;
brotli_min_length 20;
...
}
经过实地验证,brotli和gzip可以共存。这是一个好消息,意味着Jackie可以在项目中使用启用brotli算法支持的nginx。
对于支持brotli算法的浏览器,比如Chrome 49之后的版本,使用开发者工具检查网络通信时,可以看到如下的HTTP响应头。
Content-Encoding: br
参考资料
- RFC 7932
- RFC 7932
- Introducing Brotli: a new compression algorithm for the internet
- Brotli
- Results of experimenting with Brotli for dynamic web content
- Web Pages Will Soon Load Even Faster in Google Chrome
- VARNISH CACHE AND BROTLI COMPRESSION
- Boiling Fast Internet with Brotli
- Lossless compression with Brotli in Rust for a bit of Pied Piper on the backend
- Brotli: A new compression algorithm for faster Internet
- Next Generation Server Compression With Brotli
- Static site implosion with Brotli and Gzip
- The current state of Brotli compression
性能测试
- Compression Benchmarks: brotli, gzip, xz, bz2
- Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2六种无损数据压缩性能比较
- Comparison of Brotli, Deflate, Zopfli, LZMA, LZHAM and Bzip2 Compression Algorithms
- Brotli与zip压缩率对比
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/17957264