brotli在phpenv的nginx中默认不可用,须手动编译ngx_brotli模块并重装nginx;验证需执行nginx -v | grep ngx_brotli,无输出即未支持;配置必须写在http块内,启用brotli on、合理设置comp_level与types,并用curl -h "accept-encoding: br" -i测试响应头content-encoding: br。

Brotli 在 phpEnv 的 Nginx 中默认不可用,必须手动编译 ngx_brotli 模块并重新构建 Nginx;直接改配置或启用 gzip 相关开关完全无效。
确认当前 Nginx 是否已支持 Brotli
phpEnv 使用的是定制化 Nginx(通常基于较旧版本如 1.18 或 1.20),不带 ngx_brotli 模块。运行以下命令验证:
nginx -V 2>&1 | grep -o ngx_brotli
若无任何输出,说明模块未加载。注意:nginx -V 输出中的 configure arguments 是后续编译的关键依据,务必复制保存。
下载并准备 ngx_brotli 源码
phpEnv 环境下不能依赖系统包管理器安装 Brotli,必须源码集成。操作路径需严格匹配 phpEnv 的目录结构:
- 进入 phpEnv 的 Nginx 源码存放区(通常是
/www/phpenv/nginx或/www/server/nginx/src,具体以nginx -V中的--prefix和实际路径为准) - 执行:
cd /www/server && git clone https://github.com/google/ngx_brotli.git<br>cd ngx_brotli && git submodule update --init
- 确保
deps/brotli子模块成功拉取;失败时可尝试手动下载https://github.com/google/brotli/archive/refs/tags/v1.1.0.tar.gz解压到deps/brotli
重新编译 Nginx 并注入模块
phpEnv 的 Nginx 编译参数与官方略有不同,必须复用原有参数,仅追加 --add-module=/www/server/ngx_brotli:
- 先获取原始参数:
nginx -V 2>&1 | grep "configure arguments:" - 进入 Nginx 源码目录(如
/www/server/nginx/src/nginx-1.20.2),执行:./configure [原参数] --add-module=/www/server/ngx_brotli<br>make && make install
- 编译完成后,检查新二进制是否生效:
/www/server/nginx/sbin/nginx -V应含ngx_brotli - 重启 phpEnv 的 Nginx:在面板中「服务」→「重启 Nginx」,或执行
/etc/init.d/nginx restart
在 http 块中启用 Brotli 并避开常见陷阱
phpEnv 的主配置文件通常位于 /www/server/nginx/conf/nginx.conf,brotli 指令必须写在 http 块内(不是 server 或 location),且建议放在 gzip 配置之后:
-
brotli on;—— 必须显式开启,否则即使模块存在也不压缩 -
brotli_comp_level 5;—— phpEnv 服务器性能有限,不建议设为 7+;5 是压缩率与 CPU 占用的合理平衡点 -
brotli_types必须包含application/javascript和text/html,漏掉会导致 JS/HTML 不压缩;推荐完整值:brotli_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss image/svg+xml;
- 不要设
brotli_static on—— phpEnv 默认不生成.br预压缩文件,开启反而导致 404 或回退到未压缩响应
配置保存后务必点击「重载配置」(非「重启」),否则变更不生效。验证方式统一用 curl -H "Accept-Encoding: br" -I https://yoursite.com/test.js,检查响应头中是否有 content-encoding: br。
最容易被忽略的是:phpEnv 的 Nginx 进程可能由 supervisord 或自定义脚本托管,nginx -s reload 有时不触发真实重载,此时需强制 kill 主进程再启动。另外,部分 phpEnv 版本会覆盖 nginx.conf,建议将 Brotli 配置抽离为独立 include 文件(如 conf/brotli.conf)并在 http 块末尾 include brotli.conf;,避免升级后丢失。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











