如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持
本教程适用于这些操作系统版本
- Debian 10(克星)
- Debian 9(延伸)
在此页
- 要求
- 初始步骤
- 第 1 步 - 安装 Acme.sh 并从 Lets Encrypt 获取 TLS 证书
- 第 2 步 – 从官方 Nginx 存储库安装 Nginx
- 第 3 步 – 下载并编译 Brotli 源代码
- 第 4 步 – 配置 Nginx
- 链接
Brotli 是 Google 开发的通用无损压缩算法,可替代 Gzip、Zopfli 和 Deflate,它结合使用 LZ77 算法的现代变体、霍夫曼编码和 2nd 来压缩数据顺序上下文建模,其压缩率可与当前可用的最佳通用压缩方法相媲美。它的速度与 deflate 相似,但提供更密集的压缩。
Brotli 在 MIT 许可证下是开源的。
Nginx 没有官方支持,但有一个由 Google 开发的名为 ngx_brotli 的第三方模块,您可以利用它来添加对 Nginx 的支持。
本指南将向您展示如何在 Debian 10 系统上为 Nginx Web 服务器添加 Brotli 支持。
注意:本指南将使用 \johndoe\
作为示例用户,使用 \example.com
\ 作为示例域。根据您的名字替换它们。
要求
- Debian 10(克星)服务器
- Nginx 版本 1.11.5 或更高版本
- 设置
A
/AAAA
记录的域名 - TLS 证书
初始步骤
检查您的 Debian 版本:
lsb_release -ds
# Debian GNU/Linux 10 (buster)
设置时区:
sudo dpkg-reconfigure tzdata
更新您的操作系统包(软件)。这是必不可少的第一步,因为它确保您拥有操作系统默认软件包的最新更新和安全修复程序:
sudo apt update && sudo apt upgrade -y
安装 Debian 操作系统基本管理所需的一些基本软件包:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https
第 1 步 - 安装 Acme.sh 并从 Lets Encrypt 获取 TLS 证书
Brotli 要求您设置和使用 HTTPS。在这一部分中,我们将从 Lets Encrypt 获得可信证书。
下载并安装 Acme.sh:
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail
cd ~
source ~/.bashrc
检查版本:
acme.sh --version
# v2.8.2
获取 example.com:
的 RSA 和 ECDSA 证书
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail --ocsp-must-staple --keylength ec-256
运行上述命令后,您的证书和密钥将位于以下位置:
- RSA:
/etc/letsencrypt/example.com
- ECC/ECDSA:
/etc/letsencrypt/example.com_ecc
第 2 步 – 从官方 Nginx 存储库安装 Nginx
从官方 Nginx 仓库下载并安装最新的主线 Nginx:
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt
检查 Nginx 版本:
sudo nginx -v
# nginx version: nginx/1.17.4
启用并启动 Nginx 服务:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
第 3 步 – 下载并编译 Brotli 源代码
安装 Nginx 后,我们需要将 Brotli 模块 (ngx_brotli
) 构建为动态 Nginx 模块。从 Nginx 版本 1.11.5 开始,无需编译完整的 Nginx 软件就可以编译单个动态模块。在接下来的几个步骤中,我们将构建动态的 Brotli 模块,而无需编译完整的 Nginx。
下载最新版本的主线Nginx源码并解压:
wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz
注意:Nginx 包的版本号和 Nginx 源代码的版本号匹配非常重要。如果您从官方 Nginx 存储库安装了 Nginx 1.17.4,那么您必须下载相同版本的源代码,在本例中为 1.17.4。
删除 nginx-1.17.4.tar.gz:
rm nginx-1.17.4.tar.gz
从 GitHub 克隆 ngx_brotli
:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
导航到 Nginx 源代码目录:
cd ~/nginx-1.17.4
下载所需的库:
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
将 ngx_brotli
编译为动态模块并将其复制到 Nginx 模块的标准目录 /etc/nginx/modules:
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
列出 /etc/nginx/modules
中的文件,您将看到 ngx_http_brotli_filter_module.so
和 ngx_http_brotli_static_module.so:
ls /etc/nginx/modules
将所有 .so
文件的权限设置为 644
:
sudo chmod 644 /etc/nginx/modules/*.so
第 4 步 – 配置 Nginx
我们准备在 Nginx 中配置 Brotli 支持。
运行 sudo vim /etc/nginx/nginx.conf
并在文件顶部添加以下两个指令以加载新的 Brotli 模块:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
测试配置:
sudo nginx -t
为 example.com
创建一个文档根目录,并创建包含一些内容的 index.html
:
sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit
为 example.com 创建一个虚拟主机:
sudo vim /etc/nginx/conf.d/example.com.conf
使用以下配置填充它:
server {
listen 80;
server_name example.com; # Replace with your domain name
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com; # Replace with your domain name
root /var/www/example.com; # Replace with your document root
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
brotli on;
brotli_static on;
brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}
测试配置:
sudo nginx -t
重新加载 Nginx:
sudo systemctl reload nginx.service
在网络浏览器中访问您的网站并打开开发人员工具的网络选项卡。您将在响应标头中看到 Content-Encoding: br
。这表明 Brotli 压缩正在运行。


就是这样。您已在 Debian 10 系统上启用 Brotli 压缩。
链接
- https://brotli.org/ <李>
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Brotli