如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 10 上为 Nginx 添加 Brotli 压缩支持

本教程适用于这些操作系统版本

  • Debian 10(克星)
  • Debian 9(延伸)

在此页

  1. 要求
  2. 初始步骤
  3. 第 1 步 - 安装 Acme.sh 并从 Lets Encrypt 获取 TLS 证书
  4. 第 2 步 – 从官方 Nginx 存储库安装 Nginx
  5. 第 3 步 – 下载并编译 Brotli 源代码
  6. 第 4 步 – 配置 Nginx
  7. 链接

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

©2015-2025 艾丽卡 support@alaica.com