军哥LNMP一键包启用Brotli压缩

最近网上看了许多文章,说是在压缩算法上面Brotli比gzipy更具压缩效率,进而让网页打开的速度更快。我看在眼里,很是心动,奈何人懒,一直拖到前段时间才用上,也因为懒,这篇文章直到今天才写。Brotli具有以下优势:

  • 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
  • 当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;
  • 在处理不同 HTML 文档时,Brotli 依然能够提供非常高的压缩率。

有必要利用Brotli优化站点

我的站点放在了国外,访问速度相比国内站点本就不占优势,特别上到了晚上,线路炸的让人一言难尽。所以希望在自己的能力范围内,能优化就尽量优化,这样能让网站的访问速度更上一层楼,尽可能的提高访客的浏览体验。

看过我我前面文章的朋友应该还记得,我写的那篇 《LNMP升级Nginx和Openssl到最新版》 那篇文章,本人以为可以如法炮制,果断从Brotli的github项目中下载源码,并在LNMP的编译参数中像那篇文章一样加上 –with-openssl=/root/lnmp1.6/src/brotli-master 编译参数,就可以把Brotli编译到nginx中,但是后面怎么弄都启用不了Brotli。又通过 nginx -V查看了编译好的nginx编译参数,发现Brotli模板并没有编译到nginx的二进制文件里头。

编译Brotli并开启Brotli的方法

后面翻看了许多文章,看到了其中一种nginx通过挂接模板编译的方式,果断尝试,一次编译成功。今天写此文章,用作笔记。因为我用的是军哥的LNMP一键包,这里就以这个一键包去写。下面是方法和步骤:

1.定位到LNMP源码目录

  cd /root/lnmp1.6/src/

2.通过git从github拉取Brotli源码

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

3.切换到Brotli目录

  cd ngx_brotli

4.初始化子模版

  git submodule update --init

5.编辑lnmp.conf配置文件

   vi /root/lnmp1.6/lnmp.conf

6.添加需要编译的Brotli模板

   Nginx_Modules_Options='--add-module=/root/lnmp1.6/src/ngx_brotli'  

7.重新编译nginx

    cd /root/lnmp1.6  

   ./upgrade.sh nginx  

编译好后,输入 nginx -V 查看Brotli模板是否编译成功。出现下图,即成功将Brotli模板成功编译进nginx二进制文件。

Brotli模板成功编译进nginx二进制文件

8.编辑nginx.conf文件

   vi /usr/local/nginx/conf/nginx.conf

9.打开了nginx.conf文件后会看到events{}、http{}、server{}三个项,往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;

    #limit_conn_zone $binary_remote_addr zone=perip:10m;
    ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

10.重启nginx服务

    /usr/local/nginx/sbin/  -s reload

11.清除网页缓存,重新打开网页,F12 打开 开发者工具,切换到 NetworkCtrl+F5—点击选择页面地址—选择右边栏目的HeadersHeaders栏目下方的Response Headers 中出现有 content-encoding: br 表示开启Brotli成功。如下图:

content-encoding: br 表示开启Brotli成功