2019
08-08

宝塔面板LNMP开启编译Brotli压缩宝塔面板安装Brotli压缩命令

在优化网站打开速度上,我们有很多的方法,而其中一个就是减少诸如Javascript和CSS等资源文件的大小,而减少文件大小的方法除了在代码上下功夫外,最常用的方法就是使用压缩算法对文件进行压缩。

目前,网站普遍使用的是gzip压缩算法,当然你可能还知道deflate和sdch算法,但是最近两年新兴了一个新的压缩算法:Brotli,下面我将会对这个算法进行简单的介绍。

什么是Brotli压缩算法

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

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

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

又拍云 CDN 已支持 Brotli压缩算法

值得一提的是又拍云已经支持 Brotli 压缩算法

之前又拍云已经支持了 Gzip 算法,在优化网站速度方面,又拍云始终不遗余力地进行优化。目前又拍云 CDN 已支持 Brotli 压缩算法,通过对新压缩算法的支持将压缩率提升 20% ,并且帮助降低移动设备的电池使用量,并达到省电、延长电池使用寿命的目的。

Brotli压缩浏览器支持情况

宝塔面板LNMP开启编译Brotli压缩

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

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

宝塔面板LNMP开启Brotli压缩

1、下载Brotli

cd /www/server

#下载brotli

git clone https://github.com/google/ngx_brotli.gitcd ngx_brotli

#更新brotli

git submodule update --init

2、编译Nginx

提示:手动编译只测试过Nginx 1.15,部分版本好像会提示缺少模块,建议使用后面的宝塔脚本编译方法。

先查看目前的Nginx版本信息,使用命令:

nginx -V

大概会输出以下信息:

[root@rats ~]# nginx -V

nginx version: nginx/1.15.10

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 

built with OpenSSL 1.1.1b  26 Feb 2019

TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --with-openssl=/www/server/nginx/src/openssl ... --with-ld-opt=-ljemalloc

nginx版本为1.15.10,configure arguments:后面的为你nginx的编译参数,下面会用到。

然后重新下载nginx,并开始编译,使用命令:

#下载nginx,这里下载的1.15.10版本,如果是其它版本,把下载链接的1.15.10改成你的版本号即可

wget http://nginx.org/download/nginx-1.15.10.tar.gz

#解压并删除压缩包

tar -xvzf nginx-*.tar.gz && rm -rf nginx-*.tar.gz

#进入nginx目录

cd nginx*

#生成Makefile,./configure后面的参数直接复制上面看到的,然后在后面额外加一个--add-module=/www/server/ngx_brotli

./configure --user=www --group=www --prefix=/www/server/nginx ... --add-module=/www/server/ngx_brotli

#编译nginx

make && make install

不出意外的话,就编译完成了,然后继续使用命令查看信息:

nginx -V

返回参数后面多了个--add-module=/www/server/ngx_brotli就编译成功了。

除了手动编译外,还一种更加方便,且出错率很低的方法,使用宝塔自带的Nginx安装脚本进行编译安装,大致步骤:

1、编辑nginx安装脚本,路径/www/server/panel/install/nginx.sh,找到Install_Configure(){...}或Install_Nginx(){...}字段,然后找出你要安装的nginx版本号,在下面一行的./configure --user=www ...后面添加--add-module=/www/server/ngx_brotli即可,记得之间间隔一个英文空格。

2、在ssh客户端使用命令开始编译,根据自己的版本,将后面数字改为1.10、1.12、1.14、1.15、1.17、1.8、openresty等

sh /www/server/panel/install/nginx.sh install 1.16

3、安装好了使用nginx -V查看是否含有模块即可。

3、开启Brotli压缩

接下来点击面板左侧软件商店-Nginx设置-配置修改,在http段内添加以下内容来启用Brotli压缩。

brotli on;

brotli_comp_level 6;

brotli_min_length 512;

brotli_types text/plain text/javascript text/css text/xml text/x-component application/javascript application/x-javascript application/xml application/json application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;

brotli_static always;

最后点击Nginx设置里的重载配置生效即可。

Brotli全部参数详解:

brotli on;              #启用

brotli_comp_level 6;    #压缩等级,默认6,最高11,太高的压缩水平可能需要更多的CPU

brotli_buffers 16 8k;   #请求缓冲区的数量和大小brotli_min_length 20;   #指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定20字节

brotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml text/html application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp;   #指定允许进行压缩类型

brotli_static always;   #是否允许查找预处理好的、以.br结尾的压缩文件,可选值为on、off、always

brotli_window 512k;     #窗口值,默认值为512k

全部配置好了,就可以使用谷歌浏览器查看下是否开启成功,看到br字段即为成功。

最后博主感觉压缩效果还行,有兴趣的可以开一下,对于其它的安装环境,安装方法都差不多,这里默认是Brotli和Gzip共存,并且都启用了,好处就是部分老旧的浏览器不支持Brotli的时候会自动变成Gzip压缩。

您可能感兴趣的文章

免费支持本站

支付宝打赏支付宝打赏微信打赏微信打赏

本文》有 0 条评论

留下一个回复 (您的评论需要经过审核才能显示)