资讯专栏INFORMATION COLUMN

把Gzip换成Brotli的Nginx配置教程

lieeps / 854人阅读

摘要:软件工程师在年月发布了包含通用无损数据压缩的增强版本,特别侧重于压缩。与常见的通用压缩算法不同,使用一个预定义的千字节字典。另外,把换成,真的可以感受到速度明显提升了。。。

内容协商

在介绍 Brotli 之前,先说一下 HTTP 内容协商

有时候,同一个 URL 可以提供多份不同的文档,这就要求服务端和客户端之间有一个选择最合适版本的机制,这就是内容协商

HTTP 的内容协商的其中一种方式:服务端根据客户端发送的请求头中某些字段自动发送最合适的版本。可以用于这个机制的请求头字段又分两种:内容协商专用字段(Accept 字段)、其他字段

字段情况,详见下表:

请求头字段 说明 响应头字段
Accept 告知服务器发送何种媒体类型 Content-Type
Accept-Language 告知服务器发送何种语言 Content-Language
Accept-Charset 告知服务器发送何种字符集 Content-Type
Accept-Encoding 告知服务器采用何种压缩方式 Content-Encoding

例如客户端发送以下请求头:

Accept-Encoding:gzip,deflate,br

表示支持采用 gzip、deflate 或 br 压缩过的资源

浏览器的响应头可能是这样的:

Content-Encoding: gzip

详情可参考:Here

什么是 Brotli

从上面的内容了解到,我们控制使用压缩的资源,除了有Gzip外,还有br,而这个br就是我这里要说的 Brotli

Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression.

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

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

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

浏览器支持情况

Mozilla Firefox在Firefox 44中实现Brotli。

Google Chrome从Chrome 49开始支持Brotli。

Opera从Opera 36开始支持Brotli。

安装与配置过程

安装需要用到开发工具

CentOS,如下

yum groupinstall "Development Tools"

Ubuntu,如下

sudo apt-get install autoconf libtool automake

这次的教程实践环境是CentOS 7,已经在linpx.com上实现了

下面开始正式的教程

安装libbrotli

cd /usr/local/src/
git clone https://github.com/bagder/libbrotli
cd libbrotli
./autogen.sh
./configure
make && make install

安装ngx_brotli

cd /usr/local/src/
git clone https://github.com/google/ngx_brotli
cd ngx_brotli && git submodule update --init

下载Nginx

这里使用 nginx-1.10.3

cd /usr/local/src
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar -xvzf nginx-1.10.3.tar.gz && rm -rf nginx-1.10.3.tar.gz

获取Nginx Arguments

nginx -V

整理新的Arguments

根据获取到的configure arguments和上面软件的位置,重新整理configure arguments

然后再加上 --add-module=/usr/local/src/ngx_brotli

开始安装和编译

cd /usr/local/src/nginx-1.10.3
./configure [这里是你的原Arguments] --add-module=/usr/local/src/ngx_brotli
make && make install

检查是否安装正常

nginx -V
nginx -t

找到Nginx的全局配置文件

如果检测安装正常的话,可以开始配置,该配置文件一般为 nginx.conf

在合适的位置插入下面代码

#Brotli Compression
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;

再次检测是否正常

nginx -t

重启Nginx

如果正常的话,恭喜你,你已经配置完成了,重启一下Nginx即可

CentOS 6.x:

service nginx restart

CentOS 7.x:

systemctl restart nginx

检查是否生效

打开你的网页,用chrome开发者工具调试,在Network那,发现有content-encoding:br

可能的报错

如果在测试或者重载时, Nginx 报错如下:

nginx: error while loading shared libraries: libbrotlienc.so.1: cannot open shared object file: No such file or directory

解决方法是把对应的库文件在 /lib(64) 或者 /usr/lib(64) 中做上软链接:

# 64 位系统
$ ln -s /usr/local/lib/libbrotlienc.so.1 /lib64

# 32 位系统
$ ln -s /usr/local/lib/libbrotlienc.so.1 /lib
结论

一周前就已经完成配置和实践,拖到今天才写完。。。

另外,把Gzip换成br,真的可以感受到速度明显提升了。。。

内容较多,大概就这样。。。

对了,文章首发于 www.linpx.com,欢迎大家多多访问我的博客,谢谢

参考

imququ.com/post/my-nginx-conf.html

wangqiliang.com/qi-yong-brotli-ya-suo-suan-fa-ti-gao-xing-neng/

zh.wikipedia.org/wiki/Brotli

hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39552.html

相关文章

  • 11 个 Nginx 参数性能优化工作

    摘要:配置如下指令是设定的工作模式及连接数上限。指令用来指定的工作模式。该参数默认是,建议开启。配置进程的最大打开文件数调整配置进程的最大打开文件数,这个控制连接数的参数为。但副作用是资源更新可能无法及时。 工作上,需要配置 Nginx,要投入生产使用,做了一点优化工作,加上以前也经常折腾 Nginx,故记下一些优化工作。 优化 Nginx 进程数量 配置参数如下: worker_proce...

    zebrayoung 评论0 收藏0
  • Nginx配置Brotli压缩

    摘要:软件工程师在年月发布了包含通用无损数据压缩的增强版本,特别侧重于压缩。与常见的通用压缩算法不同,使用一个预定义的千字节字典。 在web应用中,为了节省流量,降低传输数据大小,提高传输效率,常用的压缩方式一般都是gzip,今天我们来介绍另外一种更高效的压缩方式brotli。  Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9...

    YacaToy 评论0 收藏0
  • SiteGround虚拟主机支持Brotli压缩技术 网站速度提高15-20%

    摘要:怎么样,好不好,应该成为您的虚拟主机选择吗虚拟主机支持压缩算法并在在服务器上部署并启用,托管在虚拟主机上的网站访问速度会提高左右。虚拟主机是官方推荐的主机,与是绝佳搭配。虚拟主机上面的网站速度稳定性都很棒,在国外测试网站评测很高。SiteGround怎么样,SiteGround好不好,SiteGround应该成为您的虚拟主机选择吗?SiteGround虚拟主机支持Brotli压缩算法并在在服...

    hellowoody 评论0 收藏0
  • 前端每周清单第 12 期:支付宝前端构建工具发展、LinkedIn用Brotli加快网页响应速度、饿

    摘要:前端每周清单第期支付宝前端构建工具发展用加快网页响应速度饿了么升级实践前端前端每周清单前端每周清单专注前端领域内容,分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。 前端每周清单第 12 期:支付宝前端构建工具发展、LinkedIn用Brotli加快网页响应速度、饿了么PWA 升级实践 为InfoQ中文站特供稿件,首发地址为这里;如需转载,请与InfoQ中文站联系。从属于笔...

    liuchengxu 评论0 收藏0
  • 启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%

    摘要:目前又拍云已支持压缩算法,通过对新压缩算法的支持将压缩率提升,并且帮助降低移动设备的电池使用量,并达到省电延长电池使用寿命的目的。当客户端同时支持两种算法时,又拍云会优先响应版本文件。 Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

lieeps

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<