【网站运维】如何给NGINX添加Brotli压缩

467次阅读
没有评论

共计 2505 个字符,预计需要花费 7 分钟才能阅读完成。

最近,本站的服务器已经正式切换为NGINX,本文旨在记录如何给NGINX添加Brotli压缩功能。

Brotli压缩介绍

2015年9月谷歌发布了Brotli压缩算法,直到现在才开始被大多数的浏览器所兼容。现在最新的HTTP服务器程序Apache和nginx也支持了Brotli压缩算法,谷歌和一些商业公司也开始对Brotli提供支持服务。和谷歌的gzip解压缩格式比起来,Brotli能在此基础上将数据在压缩20~25%。它通过一本英语、西班牙语、汉语、印地语、俄语、阿拉伯语的常用字、词汇字典,结合机器语言,特别是HTML和JavaScript的常用术语,能够将数据比gzip, bzip2, LZMA等压缩算法的基础上进一步进行压缩,减少了数据内容的容量大小,使得网页在加载时速度更快。

配置方法

准备工作

1.克隆Brotli源代码

git clone https://github.com/google/ngx_brotli.git
国内Github被墙,请使用Github镜像

执行结果如下

Cloning into 'ngx_brotli'...
remote: Enumerating objects: 206, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 206 (delta 0), reused 2 (delta 0), pack-reused 203
Receiving objects: 100% (206https://cszj.wang/wp-content/uploads/206), 74.99 KiB | 0 bytes/s, done.
Resolving deltas: 100% (90/90), done.

然后进入clone目录,加入Brotli依赖项

cd ./ngx_brotli/deps && rm -rf brotli #清空原有目录
git clone https://github.com/google/brotli.git
cd ../ && git submodule update --init #刷新依赖项

执行结果如下

Cloning into 'brotli'...                                                                                                                                                                                                       
remote: Enumerating objects: 6755, done.                                                                                                                                                                                       
remote: Total 6755 (delta 0), reused 0 (delta 0), pack-reused 6755                                                                                                                                                             
Receiving objects: 100% (6755/6755), 36.07 MiB | 15.88 MiB/s, done.                                                                                                                                                            
Resolving deltas: 100% (4411/4411), done.        
Submodule 'deps/brotli' (https://github.com/google/brotli.git) registered for path 'deps/brotli'                                                                                                                               
Submodule path 'deps/brotli': checked out '#####'                                                                                                                                                                                                                                                                                                                         

2.编译源代码

首先用nginx -v命令获得当前Nginx的版本号,如图即为1.25.1

【网站运维】如何给NGINX添加Brotli压缩
命令结果

然后,点击http://nginx.org/en/download.html链接去Nginx官网下载对应安装包

【网站运维】如何给NGINX添加Brotli压缩
下载源码

推荐右键,复制链接后,用wget来下载,如以下命令

wget http://nginx.org/download/nginx-1.25.1.tar.gz
【网站运维】如何给NGINX添加Brotli压缩
执行结果

解压包

tar -xvf nginx-1.25.1.tar.gz 

查看当前编译参数

根据官方文档,可以使用--with-compact来免去参数直接构建,不知为何我的服务器上执行后模块附加失败,故使用该方法编译。
nginx -V #注意大小写
【网站运维】如何给NGINX添加Brotli压缩
执行结果

configure arguments: 后的编译选项复制下来,最后切换到刚刚解压出的Nginx目录

cd ../nginx-1.25.1/

编译

1.configure

./configure #你复制的编译选项#  --add-dynamic-module=/root/ngx_brotli #替换为刚刚克隆到的绝对路径
错误提示
checking for LuaJIT 2.x … not found
./configure: error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x.

若出现以上错误,则按以下方法解决

export LUAJIT_INC=/usr/local/include/luajit-2.1
export LUAJIT_LIB=/usr/local/lib #临时引入lua库

【网站运维】如何给NGINX添加Brotli压缩
运行结果

若出现上图即为configure成功

2.make

sudo make modules

等待较长的编译时间

【网站运维】如何给NGINX添加Brotli压缩
运行结果

如上图即为完成

部署

1.拷贝

【网站运维】如何给NGINX添加Brotli压缩
进入objs文件夹
【网站运维】如何给NGINX添加Brotli压缩
文件夹内容

将这两个文件拷贝入Nginx目录(可以新建一个modules文件夹)

【网站运维】如何给NGINX添加Brotli压缩

2.修改配置

nginx.conf中加入如下代码

load_module /**/nginx/modules/ngx_http_brotli_filter_module.so;
load_module /**/server/nginx/modules/ngx_http_brotli_static_module.so;

加在如图位置

【网站运维】如何给NGINX添加Brotli压缩

再加入如下代码

# brotli
brotli on;
brotli_comp_level 6;
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;
【网站运维】如何给NGINX添加Brotli压缩
加在这里

重载Nginx服务即可生效

正文完
 1
lvshujun
版权声明:本站原创文章,由 lvshujun 2023-06-16发表,共计2505字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请联系站长并注明出处。
评论(没有评论)