phpEnv 的 Nginx 默认不支持 upstream keepalive,因未编译 ngx_http_upstream_keepalive 模块,故无法实现 Nginx 到 PHP-FPM 的长连接;仅支持 client→Nginx 的 HTTP 层 keepalive,需配置 keepalive_timeout 和 keepalive_requests,并同步调优 PHP-FPM 参数。

phpEnv 是 Windows 下的集成环境套件,底层用的是 Nginx + PHP-FPM,它默认不启用 upstream keepalive 连接池——也就是说,Nginx 到 PHP-FPM 的连接始终是短连接(每次请求新建 fastcgi 连接),这在高并发或小请求密集场景下会明显拖慢性能、抬高 CPU 和 socket 开销。
phpEnv 的 Nginx 不支持 upstream keepalive
phpEnv 打包的 Nginx 版本(通常是 1.16–1.20)默认未编译 ngx_http_upstream_keepalive 模块。即使你手动写 keepalive 32 在 upstream 块里,Nginx 启动时会报错:
nginx: [emerg] unknown directive "keepalive" in ...
这不是配置写错了,而是模块缺失。phpEnv 官方打包时没启用这个模块,也没提供开关或编译选项。
- 检查方式:运行
nginx -V 2>&1 | grep -o with-http-upstream-keepalive-module,若无输出即未包含 - 替代方案只有两个:换用完整版 Nginx(自行编译或下载含该模块的 Windows 二进制),或改用 Unix/Linux 环境部署
- phpEnv 的「PHP-FPM」本身是通过
fastcgi_pass 127.0.0.1:9000或 socket 文件通信,而keepalive仅适用于proxy_pass http://...场景,对fastcgi_pass无效
能优化的只有 client → Nginx 这一段
phpEnv 中可生效的 keepalive 配置,仅限于客户端(浏览器、curl 等)到 Nginx 的连接。这是 HTTP 层面的长连接,能减少 TCP 握手次数,提升二次访问速度,但无法缓解 Nginx → PHP-FPM 的压力。
立即学习“PHP免费学习笔记(深入)”;
- 修改
phpEnv\nginx\conf\nginx.conf的http块: -
keepalive_timeout 15s;(别设超过 20 秒,Windows 下 worker 进程资源紧张) -
keepalive_requests 500;(比默认 100 更合理,避免频繁重连) - 确认
server块里没覆盖成keepalive_timeout 0或禁用
PHP-FPM 侧必须同步调优
即便 client→Nginx 是长连接,如果 PHP-FPM 处理慢、响应卡顿,Nginx 的 keepalive 连接仍会被“堵住”,表现为 TTFB 升高、pending 请求堆积。这时要盯紧 PHP-FPM 的配置:
- 打开
phpEnv\php\php-fpm.conf,确保pm = dynamic,并合理设置: -
pm.max_children = 50(Windows 下不宜过高,32–64 较稳妥) pm.start_servers = 10-
pm.min_spare_servers = 5,pm.max_spare_servers = 20 -
request_terminate_timeout = 30s(防死循环,比 Nginx 的fastcgi_read_timeout略小) - 检查
phpEnv\nginx\conf\vhosts\*.conf中的fastcgi_read_timeout是否 ≥30s,否则 Nginx 可能在 PHP 还没返回时就断连
验证是否真复用了连接
别只看配置,要实测。用 Chrome DevTools 的 Network 标签页,刷新页面多次,观察每个请求的 Connection 响应头是否为 keep-alive,且 Remote Address 列的端口号不变(说明复用同一 TCP 连接);再用命令行:
curl -v http://localhost/ 2>&1 | grep "Connection:"
看到 < Connection: keep-alive 才算生效。若返回 close,回头检查是否被 location 块里某处覆盖了 keepalive_timeout,或 PHP 脚本里写了 header('Connection: close')。
真正想压榨 phpEnv 性能,重点不在“长连接”——而在减少 PHP-FPM 启动开销(用 opcache)、关掉 Xdebug、避免全量加载框架。Nginx 层的 keepalive 在这里只是锦上添花,不是救命稻草。



















