编译安装nginx的ngx-brotli模块
测试环境
- centos 7.9 64
- Nginx 1.24.0
先通过有网虚拟机下载后,上传到内网虚拟机
什么是 Brotli
我们控制使用压缩的资源,除了有 Gzip 外,还有 br,而这个 br 就是我这里要说的 Brotli
如有些大厂已经支持,可通过浏览器开发者模式查看响应头
Accept-Encoding:gzip,deflate,br
表示支持采用 gzip、deflate 或 br 压缩过的资源
浏览器支持情况
- Mozilla Firefox 在 Firefox 44 中实现 Brotli。
- Google Chrome 从 Chrome 49 开始支持 Brotli。
- Opera 从 Opera 36 开始支持 Brotli。
安装与配置过程
下载 ngx_brotli 模块
cd /usr/local/src/
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli/
git submodule update --init
# 此步骤是我需要部署内网机器,无需内网部署可省略
cd /usr/local/src/
zip -r ngx_brotli.zip ngx_brotli
下载nginx源码包
此步骤省略,自行官网下载,此次使用是1.24.0版本
因为我们是编译安装 nginx 来定制自己的模块,所以需要安装缺少的依赖包,已经存在可忽略此步骤。
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
安装brotli brotli-devel依赖
此步骤必须执行,不然编译nginx 添加ngx_brotli
模块过程存在报错
yum -y install brotli brotli-devel
重新编译Nginx
# 如已存在源码可省略
tar -xf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 查看原来配置,将原配置复制后,加上新增2个配置,一起执行(查看现有编译参数,这点很重要)
/AppHome/nginx/sbin/nginx -V
# 编译
./configure --prefix=/AppHome/nginx --with-http_ssl_module --with-http_gzip_static_module --add-module=/usr/local/src/ngx_brotli
make -j4
执行后,无报错信息,查看是否生效
[root@localhost objs]# /usr/local/src/nginx-1.24.0/objs/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/AppHome/nginx --with-http_ssl_module --with-http_gzip_static_module --add-module=/usr/local/src/ngx_brotli
#移动旧版本
mv /AppHome/nginx/sbin/nginx /AppHome/nginx/sbin/nginx.old
#复制新版本nginx过去
mv /usr/local/src/nginx-1.24.0/objs/nginx /AppHome/nginx/sbin/nginx
配置nginx开启Brotli
Nginx 的全局配置文件,在合适的位置插入下面代码
# 开启gzip
gzip on;
gzip_http_version 1.1;
gzip_static on;
gzip_min_length 1;
gzip_comp_level 4;
gzip_vary on;
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
#启用brotli压缩
# 可以与gzip共存不会冲突
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_buffers 16 8k;
brotli_min_length 20;
#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;
brotli_types application/atom+xml application/javascript application/json application/vnd.api+json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
重启nginx配置验证是否成功
./nginx -t && ./nginx -s reload
Brotli与GZIP可以同时共存,当同时开启两种压缩算法时,Brotli 压缩等级优先级高于 Gzip。如果浏览器不支持brotli会用gzip方式压缩
至此结束
参考
1.https://github.com/google/ngx_brotli
2.https://zhuanlan.zhihu.com/p/664940394
3.https://juejin.cn/post/7060352308718075935