[Nginx]编译安装 Brotli 模块,为网站添加谷歌 Brotli 压缩算法支持(日期:20181017)

2018年10月18日 0 条评论 54 次阅读 0 人点赞

由谷歌开源的 Brotli 压缩算法不知道大家听过没有?现代网站大多用的压缩算法都是 gzip,它也是非常有效的一种压缩算法,可以节省网站服务器和用户之间传输数据所需要花费的时间(毕竟是压缩传送的,这么说大家应该都能懂,不懂就想想你下载原文件和下载压缩包的区别),但是这个 Brotli,据闻能比 gzip 做得更好——不仅能获得更高的压缩比率,而且对压缩/解压速度影响也比较小(出处:https://imququ.com/post/my-nginx-conf.html)。

有关这个压缩算法的说明,我就不详细说了,毕竟本文主要是针对那些已经知道或了解 Brotli 却又不知道怎么启用的人来写的。如果你还不是很了解,也可以去谷歌的 GitHub 了解一下:https://github.com/google/brotli

 

一、下载 Nginx Brotli 源码

在下载之前,我要先跟大家提一下,源码下载地址我这里可以分享给大家两个:

  1. 谷歌官方的,源码已经很久没更新了,但是能用:https://github.com/google/ngx_brotli.git
  2. 网友 Fork 自谷歌官方的源码之后弄的,比较新,仍在更新中,也能用:https://github.com/eustas/ngx_brotli.git

具体选哪个你们自己判断吧,反正都是能用的~

下面开始说具体怎么做了,这里只说一遍,所有操作都是要你在 SSH 命令行下进行的,最好是用 Root 用户,不会出现权限之类的问题,否则自己记得适时使用 sudo 命令。

在 SSH 上找一个你想存放 Brotli 源码的目录并进入,比如 /usr/local:

cd /usr/local

使用 Git Clone 命令下载源码,源码地址自己选上面那两个的其中一个:

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

如果提示没有 git 命令的话,先去安装一个,这里就只说 Debian 的安装方法了:

apt-get update
apt-get install git

下载完之后什么也别动,直接执行下面的命令,本部分结束:

cd ngx_brotli
git submodule update --init --recursive

 

二、为 Nginx 编译进 Brotli 模块

这里我分两个部分来说,一个部分是讲自己编译 Nginx 安装的,另一种的情况要简单一点,就是用了军哥 LNMP 那个一键包安装 Nginx 的。

自编译 Nginx 安装方法

自己编译的 Nginx 的话,首先我们要获取 Nginx 的编译参数:

nginx -V

输入之后无需多看,把得到的结果里 configure arguments: XXXXXXXXX 这一部分中的 XXXXXXXXX 部分完整的复制下来,不管它有多长。

然后进入你 Nginx 的安装目录,别告诉你不知道(我们这里假设位于 /usr/local/nginx):

cd /usr/local/nginx

进入之后,输入以下的命令,XXXXXXXXX 部分就是你前面复制的那段,并在最后空格加入 --add-module=/usr/local/ngx_brotli(注意,/usr/local/ngx_brotli 这个目录是你保存 Brotli 源码的目录,具体位置请根据本文开头第一步中你设定的写):

./configure XXXXXXXXX --add-module=/usr/local/ngx_brotli

然后开始编译:

make && make install

完成重启一下~

service nginx restart

OK!编译完成~

 

军哥 LNMP 安装方法

军哥的就比较简单了,直接编辑 LNMP 安装目录下的 lnmp.conf 文件(默认的话应该位于/root/lnmp1.5 这个目录):

vi /root/lnmp1.5/lnmp.conf

按 i 开启编辑模式,在如下位置加上--add-module=/usr/local/ngx_brotli 这个编译参数,再提醒一下,/usr/local/ngx_brotli 这个目录请写自己下载保存 Brotli 源码的目录:

Nginx_Modules_Options='--add-module=/usr/local/ngx_brotli'

按 ESC 退出编辑状态,:wq 保存并退出。然后用 LNMP 自带的脚本升级一下 Nginx,这里我们可以选择同版本 Nginx 不升级,也可以真的升级,没什么差别,我们只是借用升级脚本重新编译一下 Nginx 而已:

cd /root/lnmp1.5
./upgrade.sh nginx

注意:上面那个命令里的目录路径请根据你自己安装 LNMP 位置的路径来写,如果你的 LNMP 不是安装在 Root 目录下,路径是会不同的,总之就是找到你 LNMP 安装目录下的那个 upgrade.sh 升级脚本就对了。

升级脚本执行完成之后,就是编译完成了,此时你的 Nginx 已经加入了 Brotli 模块,用 Nginx -V 这个命令可以看到。

 

三、配置 Nginx 加入 Brotli 支持

前面我们只是给 Nginx 编译安装上了 Brotli 的模块,但是此时它还是未启用生效状态的,我们需要编辑 Nginx 的配置文件,加入 Brotli 的配置。

关于 Nginx 的配置文件,这个根据你自己的情况可能会和我的位置不太一样,这里我就以 LNMP 1.5 安装的 Nginx 为例来说了,你要是自己都不知道在哪,我也没办法。

关于 LNMP 1.5 装的 Nginx 的配置文件,你有两个可以编辑的选择:

  1. 如果你只是想单个网站生效,请编辑/usr/local/nginx/conf/vhost 中的网站对应配置文件,在 Sever 段中加入下面说的一些配置
  2. 如果你有多个网站,想全局都启用 Brotli 压缩算法支持,请编辑/usr/local/nginx/conf/nginx.conf 文件,在其中的 HTTP 段中加入下面说的一些配置

PS:为了方便大家理解,简单说说我说的这个段,就是类似这种:

sever
{
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
}

http
{
XXXXXXX
XXXXXXX
XXXXXXX
}

 

OK!上面解释得够清楚得了吧?下面我来说说 Brotli 具体的一些配置参数,当然我只是跟大家简单的说说(因为本来也没几个可说的嘛=_=),完整的配置参数说明可以看看第一步下载源码里的链接,进入之后可以在页面最后看到说明。

  • brotli on

开启 Brotli 压缩算法,没什么好说的,我们当然要开启。

  • brotli_static

查找预处理好的以 .br 结尾的压缩文件。默认值是 off,也就是关闭状态。可选参数为 off, on, always. 选 always 的话就是不管什么情况都使用预处理好的文件,而不管客户端支不支持。

  • brotli_comp_level

用来设置压缩等级的,默认值是 6,这个不建议随意更改,调小了效果可能不好,大了加重服务器的负担。

  • brotli_buffers

缓冲区的数量和大小,默认的是 32 4k 或者 16 8k。默认缓冲区大小等于你服务器的一个内存页大小,Linux 平台用命令 getconf PAGE_SIZE 可以知道,一般都是 4096,也就是 4k。不过在网友 Fork 之后的 Nginx Brotli 模块说明里好像是说这条已经被弃用了。

  • brotli_window

设置 Brotli 窗口大小,默认值是 512k,没事就别改了,写默认的就好。

  • brotli_min_length

设定Content-Length响应头字段大于或等于多少时,文件才会被压缩,默认是 20,也就是大于等于 20 字节的文件才会被压缩。

  • brotli_types

设定什么类型的文件会被压缩。默认值是 text/html,这个看你自己怎么设置,如果写*的话就是什么文件都会被压缩(前提是它达到了你前面设定的大小)。

 

如果按照官方提供的文档说明,如果我们把配置放在 Nginx 配置文件的 HTTP 段中,那么完整的默认配置应该是长这样的,除了第一项(那肯定是要选择开启 Brotli 压缩的啊!):

http
    {
        XXXXXX
        XXXXXX
        XXXXXX
        XXXXXX
    
  brotli on;
        brotli_static off;
        brotli_comp_level 6;
        brotli_buffers 32 4k|16 8k;
        brotli_window 512k;  
        brotli_min_length 20;
        brotli_types text/html;
    }

PS:注意一下上面的 brotli_buffers 那段,是让你两个中选一个而不是说就这么写。还有一般的 Nginx 配置文件里也配置了 gzip 压缩算法,不过没关系,Brotli 可以完美和 gzip 配合使用的。如果浏览器支持 Brotli,那么会优先返回 Brotli 压缩的内容,如果不支持,就返回 gzip 压缩的内容。

 

四、重载 Nginx 使得配置生效

自己编译的 Nginx 用这个命令重载:

service nginx reload

如果是 LNMP 安装的,就是下面这个:

lnmp nginx reload

 

OK!教程到这里就完了,现在用你的浏览器打开自己的网站,然后 F12 看看网络选项,如果在文件的响应头里看到 Content-Encoding: br 这样的一项,就说明你配置成功了,功夫不负有心人~如果没有成功,建议再回头看看教程,找找是不是你哪里没做对,实在不行,你还可以留言评论和大家探讨下啊~

相似文章

12点半

Hello world!

文章评论(0)