介绍Google神器之Brotli

好像有些CND不支持

Posted by xqiushi on Monday, August 7, 2017

前言

相信大家对Gzip非常地熟悉,它是一种流行的文件压缩算法,现在在Linux平台下的应用十分广泛。它对纯文本文的压缩率可高达70%以上.因此,在nginx服务器中,除了缓存技术可以加速外,就算是压缩技术了.Gzip是应用较多的一种

brotli简介

brotli是以瑞士烘培产品命名,它在瑞士德语中的意思是小面包。它最初是用于网络字体的离线压缩,后来Google工程师们重写了编码器并改进为http服务下的压缩利器.这是继Zopfli之后Google官方博客宣布的新的开源压缩算法:Brotli.它通常压缩的更多的是0.5-1MB的文件,对于超过16M的文件,也做特殊地处理编码,并降低了编码和解码速度.将来可能成为主要浏览器能支持的数据压缩格式.

brotli安装[1]

CentOS7下军哥维护的LNMP(A)1.4环境的的安装方法:

  • 安装需要用到开发工具
yum groupinstall 'Development Tools'
  • 安装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
cd /usr/local/src
wget http://nginx.org/download/nginx-1.13.2.tar.gz
tar -xvzf nginx-1.13.2.tar.gz && rm -rf nginx-1.13.2.tar.gz
  • 获取Nginx以前的编译参数
nginx -V
  • 配置新参数并编译

PS:在nginx -V获得的的参数后然后再加上 –add-module=/usr/local/src/ngx_brotli 就为新参数

cd /usr/local/src/nginx-1.13.2
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --with-ld-opt='-ljemalloc' --add-module=/usr/local/src/ngx_brotli

make && make install

ipv6报错,我无视了
openssl报错,我重新下载了
  • 检查nginx
 nginx -t
  • 配置Nginx文件

在/usr/local/nginx/conf/nginx.conf的http{}内的gzip后插入下面代码:

PS:LNMP1.4中的proxy.conf参数默认为(proxy_set_header Accept-Encoding ‘';),添加如下代码便可以与gzip共存

http
    {
       …
        #gzip Compression
        gzip on;
        gzip_static on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        
        #Brotli Compression
        brotli on;
        brotli_static on;
        brotli_comp_level 11;
        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 text/html;
        brotli_buffers 16 8k;
        brotli_window 512k;
        brotli_min_length 20;
        …
	}
  • 再次检测是否正常并重启
nginx -t
systemctl restart nginx
  • 检查是否生效

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

content-encoding:br
  • 做个软链接,防止报错 把对应的库文件在 /lib(64) 或者 /usr/lib(64) 中做上软链接:
$ ln -s /usr/local/lib/libbrotlienc.so.1 /lib64

浏览器支持情况[2]

Mozilla Firefox在Firefox 44中实现Brotli。

Google Chrome从Chrome 49开始支持Brotli。

Opera从Opera 36开始支持Brotli。

windwos 10中的Microsoft Edge 开始支持Brotli。

小结

虽然安装成功了,并没有感受到速度有什么明显地提升.压缩的确有点提高以前的某篇文章是7.9K现在是7.6K😱.


参考与注释

[1]. 把Gzip换成Brotli的Nginx配置教程 Chakhsu Lau

[2]. Brotli 维基百科