为 Nginx 添加 Brotli 压缩算法支持
Brotli 是 Google 推出的一个新型压缩算法,与传统的 gzip 相比可以大幅提高压缩率,目前各大浏览器 Chrome/Firefox/Opera 均已支持 Brotli 算法。但是目前 Nginx 官方并没有默认集成 Brotli 算法,还需要手工编译以开启 Nginx 对 Brotli 算法的支持。呉真经过寻找后,发现 Nginx Plus 以及 GetPageSpeed Service 提供了预编译好的 Brotli 动态模块,但是这两者都是需要收费的商业服务。
编译 Brotli 动态模块
由于呉真有多台使用 Nginx 的 Web 服务器,且每台 Web 服务器均使用 Nginx 官方源安装的最新版本 Nginx,因此呉真决定使用 Nginx 动态模块的方式编译 Brotli 模块,这使得每次 Nginx 更新后,仅需要在一台服务器上编译出新的动态模块,即可无缝移植到其他的服务器中。如果你使用的是其他方式安装的 Nginx,其基本原理都是相同的,可以自行修改。
1 |
# 在这里先定义你使用的Nginx版本
|
这里需要注意的是,编译 Nginx 时,必须保持与现有的 Nginx 相同的编译参数。使用 nginx -V
命令查看当前编译参数,并复制 configure arguments
后的参数。
1 |
nginx -V
|
使用旧的编译参数配置新的 Nginx 编译参数。
1 |
./configure 你复制的当前编译参数 --add-dynamic-module=../ngx_brotli/ |
如果编译成功,你可以看到生成了两个.so
文件 ngx_http_brotli_filter_module.so
与 ngx_http_brotli_static_module.so
。
1 |
cd objs/
|
将两个编译好的动态库复制到 nginx 的 modules
目录下。
1 |
cp *.so /etc/nginx/modules
|
配置 Nginx 开启 Brotli 支持
在 Nginx 全局配置下载入 Brotli 动态模块。
1 |
load_module modules/ngx_http_brotli_filter_module.so;
|
在需要开启 Brotli 支持的虚拟主机下,启用 Brotli 压缩。
1 |
# brotli
|
重启 Nginx,你可以发现,对于静态文件的响应头,已经开启了 Brotli 支持。
1 |
> content-encoding: br |
呉真预编译的 Brotli 动态模块
方法一:直接下载预编译的 Brotli 动态模块
在这里,呉真提供一个预先编译好的 Brotli 动态模块,如果你使用的是 CentOS 7 系统,且使用 Nginx 官方源安装的 Nginx,可以直接下载使用,呉真会保持与 Nginx 官方仓库的同步,CentOS 8 系统目前正在适配中。
- 动态模块仓库:https://github.com/kuretru/Scripts-Collection/tree/master/files/nginx
- 支持操作系统版本:CentOS 7
- 支持 Nginx 版本:1.17.4
- 上一次维护时间:2019-10-12
1 |
cd /etc/nginx/modules
|
方法二:使用呉真 RPM 仓库安装
为了方便使用,呉真搭建了一个基于 Github Page 的 RPM 仓库,用于提供编译好的 Brotli 动态模块,可以使用 Yum 一键安装。
1 |
wget http://kuretru.github.io/packages/kuretru.repo -O /etc/yum.repos.d/kuretru.repo |
预览: