tp5.1项目启用brotli需在nginx层完成:先验证ngx_brotli模块(nginx -v | grep ngx_brotli),缺失则源码编译集成;再于http块配置brotli on、comp_level 6、types含text/html等tp5.1常用mime类型,并设brotli_static off;最后通过response headers中content-encoding: br确认生效。

TP5.1 项目启用 Brotli 压缩替代 Gzip 提速,需在 Nginx 层完成模块集成与精准配置,不能仅靠修改 PHP 或框架配置实现——因为 ThinkPHP 5.1 本身不处理传输层压缩,所有响应体压缩必须由 Web 服务器(Nginx)动态执行或预提供。
确认 Nginx 是否已集成 ngx_brotli 模块
执行 nginx -V 2>&1 | grep -o ngx_brotli,若无输出说明模块未编译进 Nginx;此时直接写配置会报错 unknown directive "brotli",后续所有操作均无效。
若输出 ngx_brotli,则跳过编译步骤,进入配置阶段;若无输出,必须源码重编译:克隆 https://github.com/google/ngx_brotli → 进入目录执行 git submodule update --init → 编译时添加 --add-module=/path/to/ngx_brotli 参数。
【模块缺失时强行 reload nginx 会导致服务启动失败】
配置 Brotli 动态压缩(TP5.1 项目适用)
打开 Nginx 主配置文件(通常为 /www/server/nginx/conf/nginx.conf 或 /etc/nginx/nginx.conf),在 http{} 块内添加以下内容:
第一步:brotli on;
第二步:brotli_comp_level 6; —— TP5.1 输出的 HTML、JS、CSS 均为文本型响应,级别 6 在压缩率与 CPU 开销间最平衡;设为 11 会显著拖慢高并发下的首屏响应。
第三步:brotli_types text/html text/plain text/css application/javascript application/json text/javascript; —— 必须显式列出 ThinkPHP 默认输出的 MIME 类型,否则 .html 和 .js 文件不会被压缩;text/xml 等非 TP5.1 常用类型可不加。
第四步:brotli_static off; —— 【TP5.1 是动态生成内容,禁用预压缩文件服务,否则可能返回空响应或 404】
验证 Brotli 是否生效
重启 Nginx:nginx -t && systemctl reload nginx(宝塔用户点「重载配置」)。
访问 TP5.1 项目任意前端页面(如 /index/index),打开浏览器开发者工具 → Network → 刷新 → 点击 HTML 请求 → 查看 Response Headers 中是否有 Content-Encoding: br。
若显示 gzip 或无该字段,检查是否把配置错放在 server 块而漏了 http 块顶层启用;若显示 br 且响应体积比 gzip 小 20% 以上,说明已成功启用。











