安装依赖
apt install dpkg-dev curl gnupg2 build-essential zlib1g-dev libpcre3 libpcre3-dev unzip cmake -y
下载编译源码
添加nginx源码库
添加 Nginx 密钥:
curl -L https://nginx.org/keys/nginx_signing.key | apt-key add -
添加密钥后,使用以下命令添加 Nginx 存储库:
vim /etc/apt/sources.list.d/nginx.list
添加如下内容
deb http://nginx.org/packages/ubuntu/ focal nginx deb-src http://nginx.org/packages/ubuntu/ focal nginx
更新存储库
apt update -y
下载nginx Brotli 源文件
目录文件最好保持一致,在后续编译配置文件修改部分需要文件路径正确
cd /usr/local/src apt source nginx
安装编译nginx所需要的文件
apt build-dep nginx -y
从github下载 Brotli 源代码:
git clone --recursive https://github.com/google/ngx_brotli.git
修改编译配置文件
修改Nginx 源并编辑 debian 规则文件添加 Brotli模块 :
cd /usr/local/src/nginx-*/ vim debian/rules
添加位置不同位置可能有些许不同,这里需要注意模块路径,也就是github下载 Brotli 源代码存储路径,如果位置不对需要自行修改
1.26.1版本
1.22.1版本
其他版本添加位置也可能会有不同
--add-module=/usr/local/src/ngx_brotli
编译文件
使用以下命令编译并构建具有 ngx_brotli 支持的 nginx 包:
dpkg-buildpackage -b -uc -us
在编译时如果出现以下报错:
/usr/bin/ld: cannot find -lbrotlienc /usr/bin/ld: cannot find -lbrotlicommon collect2: error: ld returned 1 exit status make[2]: *** [objs/Makefile:383: objs/nginx] Error 1 make[2]: Leaving directory '/usr/local/src/nginx-1.26.1/debian/build-nginx' make[1]: *** [Makefile:10: build] Error 2 make[1]: Leaving directory '/usr/local/src/nginx-1.26.1/debian/build-nginx' make: *** [debian/rules:62: build-arch.nginx] Error 2 dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
只需要编译编译一下brotli子模块即可
cd /usr/local/src/ngx_brotli/deps/brotli mkdir out cd out cmake -DCMAKE_BUILD_TYPE=Release .. make
brotli子模块编译完成后再执行编译命令
cd /usr/local/src/nginx-* dpkg-buildpackage -b -uc -us
若没有新的报错出现,在/usr/local/src
就有可安装的deb软件包
安装 Nginx 并启用 Brotli 支持
安装软件包
cd /usr/local/src/ dpkg -i *.deb
若软件无法安装,出现如下报错
新nginx和原有的冲突,现在安装的nginx再重新安装即可
apt remove nginx apt --fix-broken install
启用Brotli
安装所有软件包后,编辑 Nginx 主配置文件并启用 Brotli 支持:
vim /etc/nginx/nginx.conf
在 http{ 下面添加以下行
brotli on; brotli_comp_level 6; brotli_static on; brotli_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml;
重新启动 Nginx 服务:
systemctl restart nginx
验证 Nginx 和 Brotli
curl -H 'Accept-Encoding: br' -I http://localhost
如果一切正常,您将看到 brotli 支持的结果“content-encoding:br”,如下所示:
禁用nginx更新
将 nginx 标记为保持:
sudo apt-mark hold nginx
查看所有被标记为“保持”的包:
apt-mark showhold
取消“保持”状态,允许更新:
sudo apt-mark unhold nginx