nginx集成brotli压缩算法

  • nginx集成brotli压缩算法已关闭评论
  • 92 次浏览
  • A+
所属分类:Web前端
摘要

本文于2017年2月中旬完成,发布在个人博客网站上。
考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。

本文于2017年2月中旬完成,发布在个人博客网站上。
考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


Google开源Brotli压缩算法

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,是否允许动态压缩响应数据,可选值为onoff,默认值为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结尾的压缩文件,可选值为onoffalways,默认值为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 

参考资料

性能测试