nginx启用google Brotli提高网站访问速度

post by rocdk890 / 2018-4-23 15:45 Monday linux技术
1.什么是Brotli
Brotli最初发布于2015年,用于网络字体的离线压缩.Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩.其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别.新版本还展现了跨平台的性能改进,以及减少解码所需的内存.

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

使用brotli取代deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变.

2.浏览器支持情况
Chrome从版本49开始支持,但是完整的支持是在版本50 (2016年5月27日开始支持).
Firefox从版本52开始支持.
IE全版本不支持,但是Edge从版本15开始支持.
Safari全系不支持.
Opera从版本44开始支持.

支持Brotli压缩算法的浏览器使用的内容编码类型为br,例如以下是Chrome浏览器请求头里Accept-Encoding的值:
Accept-Encoding: gzip, deflate, sdch, br

如果服务端支持Brotli算法,则会返回以下的响应头:
Content-Encoding: br

ps:
需要注意的是,只有在HTTPS的情况下,浏览器才会发送 br 这个Accept-Encoding.

3.安装Brotli
下载ngx_brotli模块及其依赖:
git clone https://github.com/google/ngx_brotli
cd ngx_brotli
git submodule update --init

编译Nginx时加入ngx_brotli模块:
./configure --user=nginx --group=nginx --add-module=../ngx_brotli .....剩下的我就不写了,你们自己加

make -j4
make install

在Nginx配置文件的http块下增加以下指令:
brotli on;
brotli_types text/xml text/plain application/json text/css image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl application/javascript image/x-icon image/jpeg image/gif image/png;
brotli_static on;
brotli_comp_level 6;
brotli_buffers 16 10k;
brotli_window 512k;
brotli_min_length 20;

重启nginx后,用浏览器或抓包查看css和图片里的请求头是否包含 Content-Encoding: br

ps:
模块指令解析
brotli_static
启用后将会检查是否存在带有br扩展的预先压缩过的文件。如果值为always,则总是使用压缩过的文件,而不判断浏览器是否支持。

brotli
是否启用在on-the-fly方式压缩文件,启用后,将会在响应时对文件进行压缩并返回。

brotli_types
指定对哪些内容编码类型进行压缩。text/html内容总是会被进行压缩。

brotli_buffers
设置缓冲的数量和大小。大小默认为一个内存页的大小,也就是4k或者8k。

brotli_comp_level
设置压缩质量等级。取值范围是0到11.

brotli_window
设置窗口大小。

brotli_min_length
设置需要进行压缩的最小响应大小。
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-724.html

标签: nginx 压缩 https Brotli

评论: