phpEnv本身不支持HTTP/2,因其集成的Apache或旧版Nginx(如1.16/1.18)通常未编译--with-http_v2_module;需用nginx -V确认含http_v2_module且版本≥1.9.5,再配listen 443 ssl http2及有效SSL证书。

phpEnv 本身不直接支持 HTTP/2,因为它只是 Windows 下的 PHP + Apache/Nginx 集成环境套件,底层 Web 服务器是否启用 HTTP/2,取决于你选用的服务器类型、版本、编译选项和配置——而 phpEnv 默认安装的 Apache 或旧版 Nginx 几乎都不满足条件。
确认你用的是 Nginx 模式且版本 ≥1.20
Apache 在 phpEnv 中默认启用 mod_http2 的概率极低(需手动编译 + 启用模块),实际可行路径只有 Nginx。但 phpEnv 安装的 Nginx 往往是精简版或低版本(如 1.16、1.18),很可能未开启 --with-http_v2_module。
- 打开终端,运行
nginx -V 2>&1 | findstr http_v2(Windows 命令行);无任何输出 = 模块未编译,HTTP/2 不可能生效 - phpEnv 界面里“切换服务器”选的是 Nginx,但不等于它就支持 HTTP/2——必须查
nginx -V输出确认 - 若版本 http_v2,换用官方 Nginx 二进制(如 nginx 1.25 for Windows)并手动替换 phpEnv 中的
nginx.exe和conf目录(风险自担)
修改 phpEnv 的 Nginx 配置文件,显式添加 http2 参数
即使 Nginx 支持 HTTP/2,phpEnv 自带的站点配置默认只写 listen 443 ssl;,漏掉 http2 就完全无效。
- 路径通常为:
C:\phpEnv\nginx\conf\vhost\your-site.conf - 找到
server块中含listen 443 ssl;的行(注意不是 80 端口那行) - 改成:
listen 443 ssl http2;,IPv6 行(如有)也要同步改为listen [::]:443 ssl http2; - 确保该
server块内已配置有效证书路径,例如:ssl_certificate C:/phpEnv/nginx/ssl/fullchain.pem;和ssl_certificate_key C:/phpEnv/nginx/ssl/privkey.pem; - 必须启用 TLS 1.2+:
ssl_protocols TLSv1.2 TLSv1.3;,禁用TLSv1.0和TLSv1.1
验证 h2 协议是否真在浏览器中协商成功
phpEnv 运行在本地 Windows,容易被 Chrome 的代理扩展、安全软件或企业策略降级到 HTTP/1.1,仅看地址栏锁图标毫无意义。
立即学习“PHP免费学习笔记(深入)”;
- 用 Chrome 无痕窗口(禁用所有扩展),访问
https://localhost,按 F12 → Network → 刷新 → 看任意请求的Protocol列:显示h2才算成功 - 命令行验证(需 curl for Windows):
curl -I --http2 https://localhost,返回头含HTTP/2 200表示服务端支持,但不保证客户端协商成功 - 别依赖 phpEnv 面板里的“重启 Nginx”按钮——它有时只发 SIGTERM,改完配置后建议手动执行
C:\phpEnv\nginx\nginx.exe -s reload
HTTP/2 对 phpEnv 本地开发的实际价值很有限
多路复用、头部压缩这些特性在 localhost 环境下几乎无感知:TCP RTT ≈ 0ms,TLS 握手开销可忽略,资源加载瓶颈根本不在网络层。
- 如果你的目标是“提升网页加载速度”,优先做这些更有效的动作:
opcache.enable=1、关闭 Xdebug、用fastcgi_cache缓存 PHP 响应、合并 CSS/JS(HTTP/2 下非必须,但本地调试时反而更易排查) - HTTP/2 的
http2_push在 phpEnv 场景下基本不可用:Nginx for Windows 不支持该指令(官方明确说明),且推送资源需精确 URI,静态文件路径易变,维护成本高 - 真正需要 HTTP/2 的场景是公网 HTTPS 站点——phpEnv 是开发环境,不该把它当生产代理来调优



















