共计 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
执行结果如下
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。
然后,点击http://nginx.org/en/download.html链接去Nginx官网下载对应安装包
推荐右键,复制链接后,用wget
来下载,如以下命令
wget http://nginx.org/download/nginx-1.25.1.tar.gz
解压包
tar -xvf nginx-1.25.1.tar.gz
查看当前编译参数
--with-compact
来免去参数直接构建,不知为何我的服务器上执行后模块附加失败,故使用该方法编译。nginx -V #注意大小写
将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库
若出现上图即为configure
成功
2.make
sudo make modules
等待较长的编译时间
如上图即为完成
部署
1.拷贝
将这两个文件拷贝入Nginx目录(可以新建一个modules
文件夹)
2.修改配置
在nginx.conf
中加入如下代码
load_module /**/nginx/modules/ngx_http_brotli_filter_module.so;
load_module /**/server/nginx/modules/ngx_http_brotli_static_module.so;
加在如图位置
再加入如下代码
# 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服务即可生效