直接在Web服务器层面配置Nginx的gzip和brotli压缩最稳定高效:启用gzip(含application/x-httpd-php类型)、可选brotli(需模块支持),验证Content-Encoding与Vary头,并推荐静态资源预压缩。

直接在 Web 服务器层面配置压缩,而不是靠前端构建工具或 PHP 脚本临时处理,效果最稳、开销最低。核心原则是:让 Nginx(或 Apache)在响应发出前,根据客户端支持情况,自动选择 gzip 或 br 压缩文本类资源,并返回带 Content-Encoding 头的响应。
一、Nginx 中启用 Gzip(必配基础项)
Gzip 是所有现代浏览器都支持的通用压缩,必须先确保它正确启用:
- 编辑 /etc/nginx/nginx.conf(Linux)或 D:\phpEnv\Nginx\conf\nginx.conf(Windows phpEnv),在 http { } 块内添加:
gzip on; gzip_min_length 1024; gzip_types text/html text/css application/javascript application/json text/plain application/x-httpd-php image/svg+xml font/opentype; gzip_comp_level 6; gzip_vary on;
-
gzip_min_length 1024避免压缩极小响应(如空 JSON); -
application/x-httpd-php必须包含,否则 PHP 动态生成的 HTML 不会被压缩; - 改完后运行
nginx -t校验,再nginx -s reload生效。
二、Nginx 中启用 Brotli(进阶优化项)
Brotli 压缩率更高,但需额外模块支持:
- 先确认已安装
ngx_brotli:执行nginx -V 2>&1 | grep ngx_brotli,有输出才有效; - 若未安装,推荐使用预编译包(如 Ubuntu 的
nginx-extras)或从 google/ngx_brotli 编译; - 模块就绪后,在同一 http { } 块中追加:
brotli on; brotli_comp_level 5; brotli_min_length 256; brotli_types text/html text/css application/javascript application/json image/svg+xml;
-
brotli_comp_level 5是 HTML/JS/CSS 的平衡点,设太高(如 11)会明显拖慢首字节时间; -
brotli_min_length 256过滤微小响应,防止负优化; -
brotli_types和gzip_types必须完全一致,避免缓存错乱。
三、验证是否真正生效
别看本地构建后的文件大小——那没用。真实压缩发生在传输层:
- 打开 Chrome DevTools → Network → 刷新页面;
- 点击任意 HTML/JS/CSS 请求 → 查看 Response Headers;
- 确认存在 Content-Encoding: br(Brotli)或 Content-Encoding: gzip;
- 对比 “Size”(传输体积)和 “Content”(解压后体积):若 Size 明显小于 Content,说明压缩成功;
- 同时检查是否有 Vary: Accept-Encoding,这是 CDN 正确缓存多版本的前提。
四、静态资源预压缩(推荐补充)
动态压缩依赖 CPU 实时计算,高并发下可能成为瓶颈。对不变的静态文件(如构建产出的 JS/CSS/HTML),建议提前生成 .br 和 .gz 文件:
- 构建完成后执行:
brotli -q 5 -k dist/*.js和gzip -k dist/*.css; - 在 Nginx 配置中加入:
gzip_static on;和brotli_static on;; - Nginx 会优先查找同名的
.js.br或.css.gz文件直接返回,零 CPU 开销,性能更稳。


















