安装依赖

1
apt install dpkg-dev curl gnupg2 build-essential zlib1g-dev libpcre3 libpcre3-dev unzip cmake -y

下载编译源码

  1. 添加nginx源码库

    添加 Nginx 密钥:

    1
    curl -L https://nginx.org/keys/nginx_signing.key | apt-key add -

    添加密钥后,使用以下命令添加 Nginx 存储库:

    1
    vim /etc/apt/sources.list.d/nginx.list

    添加如下内容

    1
    2
    deb http://nginx.org/packages/ubuntu/ focal nginx
    deb-src http://nginx.org/packages/ubuntu/ focal nginx

    更新存储库

    1
    apt update -y
  2. 下载nginx Brotli 源文件

    目录文件最好保持一致,在后续编译配置文件修改部分需要文件路径正确

    1
    2
    cd /usr/local/src
    apt source nginx

    安装编译nginx所需要的文件

    1
    apt build-dep nginx -y

    从github下载 Brotli 源代码:

    1
    git clone --recursive https://github.com/google/ngx_brotli.git
  3. 修改编译配置文件

    修改Nginx 源并编辑 debian 规则文件添加 Brotli模块 :

    1
    2
    cd /usr/local/src/nginx-*/
    vim debian/rules

    添加位置不同位置可能有些许不同,这里需要注意模块路径,也就是github下载 Brotli 源代码存储路径,如果位置不对需要自行修改

    1.26.1版本

    image-20240703160843201

    1.22.1版本

    image-20240703161210062

    其他版本添加位置也可能会有不同

    1
    --add-module=/usr/local/src/ngx_brotli
  4. 编译文件

    使用以下命令编译并构建具有 ngx_brotli 支持的 nginx 包:

    1
    dpkg-buildpackage -b -uc -us

    在编译时如果出现以下报错:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /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

    image-20240703162706876

    只需要编译编译一下brotli子模块即可

    1
    2
    3
    4
    5
    cd /usr/local/src/ngx_brotli/deps/brotli
    mkdir out
    cd out
    cmake -DCMAKE_BUILD_TYPE=Release ..
    make

    brotli子模块编译完成后再执行编译命令

    1
    2
    3
    cd /usr/local/src/nginx-*

    dpkg-buildpackage -b -uc -us

若没有新的报错出现,在/usr/local/src就有可安装的deb软件包

安装 Nginx 并启用 Brotli 支持

  1. 安装软件包

    1
    2
    cd /usr/local/src/
    dpkg -i *.deb

    若软件无法安装,出现如下报错

    image-20240703163851175

    新nginx和原有的冲突,现在安装的nginx再重新安装即可

    1
    2
    apt remove nginx
    apt --fix-broken install
  2. 启用Brotli

    安装所有软件包后,编辑 Nginx 主配置文件并启用 Brotli 支持:

    1
    vim /etc/nginx/nginx.conf

    在 http{ 下面添加以下行

    1
    2
    3
    4
        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 服务:

    1
    systemctl restart nginx

验证 Nginx 和 Brotli

1
curl -H 'Accept-Encoding: br' -I http://localhost

如果一切正常,您将看到 brotli 支持的结果“content-encoding:br”,如下所示:

image-20240703164748332

禁用nginx更新

将 nginx 标记为保持:

1
sudo apt-mark hold nginx

查看所有被标记为“保持”的包:

1
apt-mark showhold

取消“保持”状态,允许更新:

1
sudo apt-mark unhold nginx