当前位置: 代码网 > it编程>数据库>Mysql > Nginx中Brotli安装实现步骤

Nginx中Brotli安装实现步骤

2026年07月31日 Mysql 我要评论
一、引言:为什么 gzip 不再是“终极答案”?在 web 性能优化领域,gzip 统治了二十余年。但随着网页体积的膨胀和移动端网络的普及,gzip 的压缩率瓶颈日益凸显。br

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

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

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

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

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

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

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

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

nginx -v

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

2. 安装编译依赖

# 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 源码

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: 使用相同参数重新编译模块

# 进入你当前 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: 安装并启用模块

# 复制生成的 .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: 验证并重载

sudo nginx -t          # 语法检查
sudo systemctl reload nginx   # 平滑重载,零停机

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

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

./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 块中添加以下配置:

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_level4-6实时压缩黄金区间。>6 时 cpu 消耗急剧上升但收益递减;构建时用 11
brotli_min_length256小于此值的响应不压缩,避免负收益
brotli_staticon配合构建工具生成 .br 文件,实现零 cpu 压缩
brotli_types见上方不包含图片/视频/woff2等已压缩格式

七、验证 brotli 是否生效

方法 1:curl 命令行

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 精细化控制:

# 静态资源:全力压缩
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 范围

九、结语

到此这篇关于nginx中brotli安装实现步骤的文章就介绍到这了,更多相关nginx brotli安装内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com