phpEnv 的 nginx.conf 通常位于 /home/wwwroot/phpenv/etc/nginx/nginx.conf 或 /www/server/phpenv/etc/nginx/nginx.conf,需用 find / -name "nginx.conf" 2>/dev/null | grep -i phpenv 精准定位,切勿误改系统级配置路径。

phpEnv 是一键集成环境,Nginx 进程数不能通过面板直接改,必须手动编辑配置文件;改错会导致 nginx -t 校验失败或 reload 后 worker 数不变。
怎么找到 phpEnv 的 nginx.conf 文件
phpEnv 默认不把 Nginx 配置放在 /usr/local/nginx/conf/,而是藏在安装目录下。常见路径有:
-
/home/wwwroot/phpenv/etc/nginx/nginx.conf(多数新版 phpEnv 使用) -
/www/server/phpenv/etc/nginx/nginx.conf(部分宝塔兼容版) - 如果不确定,用
find / -name "nginx.conf" 2>/dev/null | grep -i phpenv搜
别直接改 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf —— 那些是系统级或独立安装的 Nginx,和 phpEnv 无关。
改 worker_processes 前先看 CPU 实际可用核数
phpEnv 常跑在虚拟机或容器里,/proc/cpuinfo 显示的核数 ≠ 实际能用的核数。更可靠的方式是:
立即学习“PHP免费学习笔记(深入)”;
- 查 cgroup 限制(容器场景):
cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us和/sys/fs/cgroup/cpu/cpu.cfs_period_us,算出配额核数 - 查逻辑 CPU 数但过滤掉被限制的:
nproc(比grep -c processor /proc/cpuinfo更准) - 如果
nproc返回 2,就别设worker_processes 4—— 多余进程会争抢调度,反而拖慢响应
常见安全值:worker_processes 1(低配 VPS)、2(4G 内存以下)、4(8G+ 且物理核 ≥4)
改完必须同步调这三项,否则没效果甚至报错
只改 worker_processes 是白改。phpEnv 的 Nginx 默认没开 epoll、没设 worker_rlimit_nofile、也没配 worker_cpu_affinity,导致高并发时卡在系统限制上:
- 在
events块里加:use epoll;(Linux 必加,否则 fallback 到低效的select) - 在
events外、http前加:worker_rlimit_nofile 65535;(否则worker_connections设再高也卡在 ulimit) - 如果确认是多核且无其他服务争抢,可加:
worker_cpu_affinity auto;(比手写二进制掩码更安全,phpEnv 1.7+ 支持)
改完立刻执行:nginx -t → 成功再 nginx -s reload。别用 killall -HUP nginx,phpEnv 的 master 进程可能不是 root 启动,信号发不到。
验证是否生效,别信 ps 看到的进程数
ps aux | grep nginx 显示多个 worker process 不代表真在干活 —— 可能全挤在同一个 CPU 上。真正要看:
-
nginx -V 2>&1 | grep -o 'built by.*'确认用了 epoll(输出含epoll才对) -
cat /proc/$(pgrep -f "nginx: worker")/status | grep -i "cpus_allowed_list"看每个 worker 绑定的 CPU 范围 - 压测时用
htop观察各 CPU 核的 %us 是否均匀,若只有 cpu0 跑满,说明worker_cpu_affinity没生效或设错了
最容易被忽略的是:phpEnv 自带的 PHP-FPM 子进程数(pm.max_children)和 Nginx worker_processes 不匹配。比如 Nginx 开了 4 个 worker,但 PHP-FPM 只配了 5 个子进程,所有请求最终会堵在 FastCGI 队列里 —— 这时候调 Nginx 进程数毫无意义。



















