本教程适用于以下操作系统版本

  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 18.04(Bionic Beaver)

本页内容

  • 先决条件
  • 开始之前
  • 下载 Nginx 和 Brotli 源码
  • 安装 Nginx 并启用 Brotli 支持
  • 验证 Nginx 和 Brotli
  • 结语

Brotli 是由 Google 创建的一款开源压缩算法。它可以作为 Gzip、Zopfli 和 Deflate 的替代方案。它是一种通用无损压缩算法,通过结合现代变体的 LZ77 算法与 Huffman 编码来压缩数据。相比当前的主流压缩算法,它的数据压缩率高出 10% 到 20%。

本教程将向你展示如何在 Ubuntu 20.04 服务器上为 Nginx 安装 Brotli。

先决条件

  • 一台运行 Ubuntu 20.04 的服务器。
  • 服务器上已配置 root 密码。

开始之前

首先,建议将你的系统软件包更新到最新版本。你可以通过运行以下命令来全部更新:

apt-get update -y

所有软件包更新完成后,你可以运行以下命令安装其他依赖项:

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

所有依赖项安装完成后,你可以继续进行下一步。

下载 Nginx 和 Brotli 源码

在下载 Nginx 和 Brotli 源码之前,你必须先将 Nginx 软件仓库添加到你的系统中。

首先,使用以下命令下载并添加 Nginx 密钥:

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

密钥添加完成后,使用以下命令添加 Nginx 软件仓库:

nano /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-get update -y

软件仓库更新完成后,切换到 /usr/local/src 目录,并使用以下命令下载 Nginx 源码:

cd /usr/local/src
apt-get source nginx

接下来,运行以下命令安装 Nginx 所需的全部依赖项:

apt-get build-dep nginx -y

所有依赖项安装完成后,运行以下命令从 Git 仓库下载最新版本的 Brotli 源码:

git clone --recursive https://github.com/google/ngx_brotli.git

接下来,切换到 Nginx 源码目录并编辑 debian 规则文件:

cd /usr/local/src/nginx-*/
nano debian/rules

现在你会得到 'config.env.nginx' 和 'config.env.nginx_debug' 两个构建环境。在这两个构建环境中都添加 ngx_brotli 的 '--add-module=' 选项。

--add-module=/usr/local/src/ngx_brotli

完成后保存并关闭文件。现在,运行以下命令编译并构建带有 ngx_brotli 支持的 nginx 软件包:

dpkg-buildpackage -b -uc -us

构建完成后,你会在 '/usr/local/src' 目录下得到 nginx-*.deb 软件包,如下所示。

ls -l /usr/local/src/*.deb

你应该会看到类似以下的输出:

-rw-r--r-- 1 root root  1124244 Dec  2 06:30 /usr/local/src/nginx_1.18.0-2~focal_amd64.deb
-rw-r--r-- 1 root root 10608196 Dec  2 06:30 /usr/local/src/nginx-dbg_1.18.0-2~focal_amd64.deb

完成后,你可以继续进行下一步。

安装 Nginx 并启用 Brotli 支持

现在你已拥有带有 Brotli 支持的 Nginx 软件包。你可以通过以下命令安装它们:

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

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

nano /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 是否存在语法错误:

nginx -t

你应该会看到类似以下的输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

接下来,重启 Nginx 服务以使更改生效:

systemctl restart nginx

完成后,你可以继续进行下一步。

验证 Nginx 和 Brotli

至此,Nginx 已安装并配置好 Brotli 支持。现在是时候测试 Nginx 的 Brotli 支持是否已启用了。

要进行测试,请在你的终端中运行以下命令:

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

如果一切正常,你会看到 Brotli 支持对应的结果 'content-encoding: br',如下所示:

HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Wed, 02 Dec 2020 06:38:17 GMT
Content-Type: text/html
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: W/"5e9efe7d-264"
Content-Encoding: br

结语

恭喜!你已成功在 Ubuntu 20.04 服务器上为 Nginx 安装了 Brotli 支持。希望你现在可以轻松在生产环境中启用 Brotli 压缩。如果你有任何疑问,欢迎随时向我提问。