phpEnv 不管理 Nginx 的 keepalive_timeout,需手动修改 C:\phpEnv\nginx\conf\nginx.conf,在 http 块中添加 keepalive_timeout 30s; 和 keepalive_requests 5000;,再重启 Nginx 生效。

phpEnv 本身不管理 Nginx 的 keepalive_timeout 配置,它只是个 Windows 下的 PHP 环境集成包,Nginx 配置仍需手动编辑 nginx.conf。 所有 phpEnv 自带的 Nginx 实例(如 Nginx 1.20、1.22)默认启用 keep-alive,但 keepalive_timeout 值仍是默认的 75s,对高并发或低延迟场景不够用,必须人工调整。
怎么改 phpEnv 中 Nginx 的 keepalive_timeout
phpEnv 安装后,Nginx 配置文件路径固定为:C:\phpEnv\nginx\conf\nginx.conf(或你自定义的安装目录)。修改前建议备份原文件。
- 用记事本或 VS Code 打开
nginx.conf - 在
http块内(通常在include mime.types;下方)添加或修改这一行:keepalive_timeout 30s;
- 若想同时控制响应头中显示的 timeout 值(可选),写成:
keepalive_timeout 30s 30s;
- 保存后,在 phpEnv 控制面板里点击「重启 Nginx」,或命令行执行:
nginx -t && nginx -s reload
为什么不能只调 keepalive_timeout?还得配 keepalive_requests
只改 keepalive_timeout 不够——Nginx 还会按请求数强制断连。默认 keepalive_requests 100 在 QPS > 1000 场景下会导致每秒大量连接被重建,TIME_WAIT 暴涨。
- 在同一个
http块里,紧挨着keepalive_timeout加上:keepalive_requests 5000;
- 这个值要根据你的压测结果调:QPS 越高、平均响应时间越短,就该设越大;但别超过后端(如 PHP-FPM)能稳定维持的并发连接数
- 改完必须 reload,否则不生效
phpEnv 场景下容易被忽略的坑
phpEnv 默认把 Nginx 当作静态服务 + PHP-FPM 网关用,但很多人没意识到:Nginx 到 PHP-FPM 是 upstream 关系,而 keepalive_timeout 只管「客户端 → Nginx」这一段。真正影响 PHP 处理效率的是另一套参数。
立即学习“PHP免费学习笔记(深入)”;
-
keepalive_timeout对 PHP-FPM 无效 —— 因为 phpEnv 默认用fastcgi_pass,不是proxy_pass,所以 upstream 的keepalive指令不适用 - PHP-FPM 自身的连接复用靠
pm.max_children和pm.start_servers控制,不是 Nginx 的keepalive - 如果你用 phpEnv 搭 API 网关(比如反向代理到另一个后端),那才需要在
upstream块里配keepalive 32;+proxy_http_version 1.1;,否则纯 PHP 本地处理时这些配置无意义
最常出问题的地方是:改了 keepalive_timeout 却没 reload,或者以为改了就能让 PHP-FPM 复用连接——其实不能。Nginx 的长连接优化只发生在它和客户端之间,PHP 层是否复用,得看 FPM 的进程模型和超时设置。



















