如何在 CentOS 8 上的 Nginx 中启用 Brotli 压缩如何在 CentOS 8 上的 Nginx 中启用 Brotli 压缩如何在 CentOS 8 上的 Nginx 中启用 Brotli 压缩如何在 CentOS 8 上的 Nginx 中启用 Brotli 压缩
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

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

如何在 CentOS 8 上的 Nginx 中启用 Brotli 压缩

在此页

  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 的支持。

本教程将向您展示如何在 CentOS 8 服务器上向 Nginx 网络服务器添加 Brotli 支持。

注意:本指南将使用 \johndoe\ 作为示例用户,使用 \example.com\ 作为示例域。根据您的名字替换它们。

要求

  • CentOS 8 服务器
  • Nginx 版本 1.11.5 或更高版本
  • 设置A/AAAA记录的域名
  • TLS 证书

初始步骤

检查您的 CentOS 版本:

cat /etc/centos-release
# CentOS Linux release 8.0.1905 (Core)

设置时区:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

更新您的操作系统包(软件)。这是重要的第一步,因为它确保您拥有操作系统默认软件包的最新更新和安全修复程序:

sudo dnf update -y

安装 CentOS 操作系统基本管理所需的一些基本软件包:

sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"

第 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.6

获取 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:

安装先决条件:

sudo yum install yum-utils

要设置 yum 存储库,请使用以下内容创建名为 /etc/yum.repos.d/nginx.repo 的文件:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

默认情况下,使用稳定 nginx 包的存储库。我们需要使用主线 nginx 包。运行以下命令以使用主线源:

sudo yum-config-manager --enable nginx-mainline

要安装 nginx,请运行以下命令:

sudo yum install -y nginx

检查 Nginx 版本:

sudo nginx -v
# nginx version: nginx/1.17.8

启用并启动 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.8.tar.gz && tar zxvf nginx-1.17.8.tar.gz

注意:Nginx 包的版本号和 Nginx 源代码的版本号匹配非常重要。如果您从官方 Nginx 存储库安装了 Nginx 1.17.8,那么您必须下载相同版本的源代码,在本例中为 1.17.8。

移除 nginx-1.17.8.tar.gz:

rm nginx-1.17.8.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.8

下载所需的库:

sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

将 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 压缩正在运行。

就是这样。您已在 CentOS 8 系统上启用 Brotli 压缩。

链接

  • https://brotli.org/ <李>
  • https://github.com/google/ngx_brotli
  • https://en.wikipedia.org/wiki/Brotli

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