广告位联系
返回顶部
分享到

Nginx中Brotli的安装实现

nginx 来源:互联网 作者:佚名 发布时间:2026-08-01 09:38:59 人浏览
摘要

一、引言:为什么 Gzip 不再是终极答案? 在 Web 性能优化领域,Gzip 统治了二十余年。但随着网页体积的膨胀和移动端网络的普及,Gzip 的压缩率瓶颈日益凸显。 Brotli(br) 由 Google 于 2015 年推出

一、引言:为什么 Gzip 不再是“终极答案”?

在 Web 性能优化领域,Gzip 统治了二十余年。但随着网页体积的膨胀和移动端网络的普及,Gzip 的压缩率瓶颈日益凸显。

Brotli (br) 由 Google 于 2015 年推出,专为 Web 文本资源设计。相比 Gzip,它在同等压缩级别下能额外减少 15%-25% 的传输体积。这意味着:

  • ???? 更快的 LCP/FCP:关键资源更小,首屏渲染更快。
  • ???? 更低的 CDN 账单:流量费用直接下降 20%。
  • ???? 更好的移动体验:弱网环境下感知尤为明显。

然而,与 Gzip 不同,Brotli 并非 Nginx 内置模块。你需要手动编译安装第三方模块 ngx_brotli。这正是许多开发者望而却步的原因。

???? 本文价值:
彻底消除 Brotli 安装的“黑盒恐惧”。从源码编译到动态加载,从基础配置到生产级最佳实践,一篇文章带你走完全部流程!

二、安装前准备:确认你的环境

1. 检查 Nginx 版本与编译参数

1

nginx -V

记录输出中的 configure arguments,后续重新编译时需要保持完全一致。同时确认 Nginx 版本 ≥ 1.13.7(推荐 1.20+)。

2. 安装编译依赖

1

2

3

4

5

6

7

8

# Debian/Ubuntu

sudo apt update

sudo apt install -y git gcc g++ make cmake \

    libpcre3-dev zlib1g-dev libssl-dev libbrotli-dev

 

# CentOS/RHEL

sudo yum groupinstall -y "Development Tools"

sudo yum install -y git pcre-devel zlib-devel openssl-devel brotli-devel

?? 关键点:libbrotli-dev / brotli-devel 是 Brotli 算法的核心库,缺少它编译必定失败。

三、安装方案选择

方案 适用场景 优点 缺点
A. 动态模块加载 (推荐) 已有生产 Nginx,不想中断服务 无需替换二进制,随时卸载 需 Nginx ≥ 1.9.11 + --with-compat
B. 静态编译 全新部署或可接受短暂停机 性能略优,兼容所有版本 需替换 nginx 二进制,风险较高
C. 包管理器安装 快速验证/开发环境 一条命令搞定 版本不可控,生产不推荐

四、方案 A:动态模块加载(生产推荐)

Step 1: 获取 ngx_brotli 源码

1

2

3

4

5

cd /usr/local/src

git clone --depth=1 https://github.com/google/ngx_brotli.git

cd ngx_brotli

# 更新内置的 brotli 子模块

git submodule update --init --recursive

Step 2: 使用相同参数重新编译模块

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 进入你当前 Nginx 源码目录(版本必须与运行中的一致)

cd /usr/local/src/nginx-1.24.0

 

# 使用 nginx -V 输出的原始参数,追加 --add-dynamic-module

./configure \

    --prefix=/etc/nginx \

    --sbin-path=/usr/sbin/nginx \

    --modules-path=/usr/lib64/nginx/modules \

    --with-http_ssl_module \

    --with-http_v2_module \

    --with-compat \                          # ← 动态模块必须加这个

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

 

# 仅编译模块,不安装

make modules

Step 3: 安装并启用模块

1

2

3

4

5

6

7

# 复制生成的 .so 文件到模块目录

sudo cp objs/ngx_http_brotli_filter_module.so /usr/lib64/nginx/modules/

sudo cp objs/ngx_http_brotli_static_module.so /usr/lib64/nginx/modules/

 

# 在 nginx.conf 最顶部添加

echo 'load_module modules/ngx_http_brotli_filter_module.so;' | sudo tee -a /etc/nginx/nginx.conf

echo 'load_module modules/ngx_http_brotli_static_module.so;' | sudo tee -a /etc/nginx/nginx.conf

Step 4: 验证并重载

1

2

sudo nginx -t          # 语法检查

sudo systemctl reload nginx   # 平滑重载,零停机

五、方案 B:静态编译(全新部署)

如果你正在从零搭建服务器,可以直接将 Brotli 编入 Nginx:

1

2

3

4

5

6

7

./configure \

    --prefix=/etc/nginx \

    --with-http_ssl_module \

    --with-http_v2_module \

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

 

make && sudo make install

???? 提示:静态编译后无需 load_module 指令,模块自动可用。

六、核心配置详解

安装完成后,在 http 块中添加以下配置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

http {

    # ========== Brotli 动态压缩 ==========

    brotli on;                    # 主开关

    brotli_comp_level 6;          # 压缩级别 (0-11),推荐 4-6

    brotli_min_length 256;        # 最小压缩长度(字节)

    brotli_buffers 16 8k;         # 压缩缓冲区

    brotli_types                  # 需要压缩的 MIME 类型

        text/plain

        text/css

        application/json

        application/javascript

        text/xml

        application/xml

        application/xml+rss

        text/javascript

        image/svg+xml

        font/ttf

        font/otf;

     

    # ========== Brotli 静态预压缩 ==========

    # 优先查找 .br 文件,避免实时压缩CPU开销

    brotli_static on;

     

    # ========== 兼容性保障 ==========

    # 为不支持 Brotli 的客户端保留 Gzip 兜底

    gzip on;

    gzip_comp_level 6;

    gzip_types text/plain text/css application/json

               application/javascript text/xml application/xml;

}

关键参数解读

参数 推荐值 说明
brotli_comp_level 4-6 实时压缩黄金区间。>6 时 CPU 消耗急剧上升但收益递减;构建时用 11
brotli_min_length 256 小于此值的响应不压缩,避免负收益
brotli_static on 配合构建工具生成 .br 文件,实现零 CPU 压缩
brotli_types 见上方 不包含图片/视频/woff2等已压缩格式

七、验证 Brotli 是否生效

方法 1:curl 命令行

1

2

3

4

curl -H "Accept-Encoding: br" -I https://yourdomain.com/app.js

 

# ? 成功标志:

# Content-Encoding: br

方法 2:浏览器 DevTools

打开 Network 面板 → 点击任意 JS/CSS 请求 → Response Headers 中确认 Content-Encoding: br。

方法 3:在线检测工具

访问 https://tools.keycdn.com/brotli-test 输入域名即可一键检测。

八、生产环境避坑指南

1. 永远保留 Gzip 作为兜底

仍有约 3%-5% 的用户代理不支持 Brotli(老旧浏览器、部分企业代理网关)。Brotli 和 Gzip 必须共存,Nginx 会根据 Accept-Encoding 自动选择最优编码。

2. HTTPS 是前提

主流浏览器仅在 HTTPS 连接上发送 Accept-Encoding: br。如果你的站点仍在使用 HTTP,Brotli 永远不会被触发。

3. 不要对 API 盲目开启

对于高频小响应的 JSON API,Brotli 的压缩启动开销可能超过收益。建议通过 location 精细化控制:

1

2

3

4

5

6

7

8

9

10

# 静态资源:全力压缩

location ~* \.(js|css|html|svg)$ {

    brotli on;

    brotli_comp_level 6;

}

 

# API 接口:谨慎评估

location /api/ {

    brotli off;  # 或使用更低级别 brotli_comp_level 2;

}

4. 监控 CPU 变化

上线后密切关注 CPU 使用率。如果发现 Brotli 实时压缩导致 CPU 飙升,应立即:

  • 降低 brotli_comp_level 至 4
  • 启用 brotli_static 预压缩
  • 缩小 brotli_types 范围

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Nginx中Brotli的安装实现
    一、引言:为什么 Gzip 不再是终极答案? 在 Web 性能优化领域,Gzip 统治了二十余年。但随着网页体积的膨胀和移动端网络的普及,Gzip 的压
  • nginx配置https+域名访问springboot接口的教程

    nginx配置https+域名访问springboot接口的教程
    目标 通过nginx配置,实现通过https+域名访问springboot部署的tomcat接 实现步骤 1、首先申请证书 下载适用于ngxin版本的证书(.PEM格式) 2、下载
  • nginx多域名及https配置全过程(Tomcat服务器)

    nginx多域名及https配置全过程(Tomcat服务器)
    主域名配置 二级域名配置 详细配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 4
  • 如何配置内存文件系统tmpfs作为 Nginx 临时目录彻
    要让 Nginx 临时目录彻底脱离磁盘 I/O,关键不是挂个内存盘,而是把所有会触发同步写、小文件刷盘、跨设备 rename 的临时路径,全部精准替
  • 怎么在Nginx中配置集群级别的全局限流策略
    在 Nginx 中实现集群级别的全局限流,本质是突破单机限制,让多个 Nginx 实例共享同一套限流状态。但需明确:Nginx 原生的limit_req_zone和lim
  • nginx:stable镜像的使用及说明
    nginx:stable镜像的使用 以前使用的nginx:stable-alpine 但是https加载很慢,所以尝试换成nginx:stable,结果不仅https 快了,页面加载和接口调用都快了
  • Nginx使用upstream后端接口报 400
    upstream模块介绍 Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和
  • 查看nginx是否已经启动的实现方式
    在 Ubuntu 或其他 Linux 系统上,要查看 Nginx 是否已经启动,您可以使用以下几种方法之一: 方法一:使用systemctl命令 Nginx 通常作为 systemd 服
  • 在Ubuntu上安装Nginx的实现过程
    在Ubuntu系统中从源码安装Nginx可以让您自定义Nginx的编译选项和模块,以满足特定需求。 以下是详细的步骤指南: 前提条件 更新系统包列表
  • Windows上启动停止Nginx服务器
    在 Windows 上开发 Django、Vue 或其他 Web 项目时,Nginx 往往是我们最常用的反向代理服务器。然而,不同于 Linux 系统上顺手的 systemctl 命令,
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计