为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 |