为 nginx 启用 Brotli 压缩算法,提高性能
- 0次
- 2021-05-20 21:32:09
- idczone
https://wangqiliang.com/qi-yong-brotli-ya-suo-suan-fa-ti-gao-xing-neng/
必要资源
将该算法运用到nginx中,需要用到以下的库(Github上):
google/brotli
google/ngx_brotli
bagder/libbrotli
安装过程:
1.首先安装 bagder/libbrotli
$ git clone https://github.com/bagder/libbrotli
$ cd libbrotli
# 备注,下一步所执行的 大带宽服务器autogen.sh 会自动从 Github 下载 google/brotli 这个库,无需另外下载。
$ ./autogen.sh
$ ./configure
$ make && make install
2.然后安装 google/ngx_brotli:
$ git clone https://github.com/bagder/libbrotli
$ cd nginx-1.11.3
# 此处应该有你自己的配置,再加上 google/ngx_brotli 库
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install
3.根据Github页面,配置nginx.conf,在http配置段增加以下配置:
brotli on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types *;
4.考虑到部分基于node.js的博客会在后台自动Gzip,所以在网站反代配置里加上下面这一句话。
这句话的目的是,告知后端:前端不接受Gzip编码,不要做Gzip:
proxy_set_header Accept-Encoding "";
5.最后,测试配置,重载生效:
$ nginx -t
$ nginx -s reload
可能的报错
如果在测试或者重载时,nginx报错如下:
nginx: error while loading shared libraries: libbrotlienc.so.1: cannot open shared object file: No such file or directory
可行的解决方案之一,是把对应的库文件做软链接:
# 64 位系统
$ ln -s /usr/local/lib/libbrotlienc.so.1 /lib64
# 32 位系统
$ ln -s /usr/local/lib/libbrotlienc.so.1 /lib
重载nginx,若无报错,即问题解决:
$ nginx -s reload
怎么能提高性能,应该是节约流量吧。
参考了谷歌官方的描述:It is similar in speed with deflate but offers more dense compression.
的确是在保持了速度的同时节约流量。
话说这样设置的话在浏览器没有发 accept-encoding:br 时也会用 brotli 压缩么
提高性能的原理是什么?
既然是要提高性能,那我不压缩不是性能最高?
能和 gzip 共存吗?
如果不支持共存,不支持 brotli 的浏览器是不是不能使用任何压缩?
不行,识别就靠这个
能和 gzip 共存
准确来说是因为采用了一些技术让相关的压缩包在压缩速度基本不受影响的情况下密度最大