nginx集成brotli压缩算法

本文于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

参考资料

性能测试

posted @   jackieathome  阅读(286)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示