需先启用PHP-FPM状态页(如pm.status_path = /fpm-status),再通过Nginx反向代理暴露;同时可启用stub_status模块查看Nginx连接层状态,结合active processes与Active connections等指标协同分析实时负载与瓶颈。

直接在 Nginx 中无法查看 PHP-FPM 的实时连接状态,因为 PHP-FPM 自身提供状态页,Nginx 只是通过 FastCGI 协议将其暴露为一个 HTTP 接口。要实现“结合状态监控模块查看实时连接”,本质是:启用 PHP-FPM 内置状态页 + 用 Nginx 反向代理该接口 +(可选)同时启用 Nginx 自身的 stub_status 模块作对比参考。
启用 PHP-FPM 状态页
这是核心前提,必须先配置 PHP-FPM 才能有数据可看:
- 编辑 PHP-FPM 的进程池配置文件(通常是 www.conf 或 pool.d/www.conf)
- 取消注释并设置 pm.status_path,例如:
pm.status_path = /fpm-status - 可选但推荐:开启 ping 接口用于健康检查:
ping.path = /fpm-pingping.response = pong - 保存后重载 PHP-FPM:
sudo systemctl reload php-fpm或sudo pkill -USR2 $(cat /run/php/php*-fpm.pid)
Nginx 配置反向代理状态接口
让 Nginx 把请求(如 /fpm-status)转发给 PHP-FPM 的状态服务:
- 在 server 块中添加 location,路径需与
pm.status_path严格一致: location = /fpm-status {<br> include fastcgi_params;<br> fastcgi_pass 127.0.0.1:9000; # 或 unix:/run/php/php8.2-fpm.sock<br> fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;<br> allow 127.0.0.1;<br> deny all;<br> access_log off;<br>}- 注意使用
=精确匹配,避免被其他 location 规则覆盖 - 重载 Nginx:
sudo nginx -s reload
访问状态页获取实时连接信息
状态页本身不叫“连接数”,但包含反映并发处理能力的关键指标:
立即学习“PHP免费学习笔记(深入)”;
- 直接访问:
curl http://localhost/fpm-status(因设置了 allow,仅本机可查) - 加参数切换格式:
•?json→ 便于脚本解析
•?full→ 显示每个 worker 进程详情(含 PID、state、request URI、耗时等)
•?html→ 可读性更强的网页版 - 重点关注字段:
• active processes:当前正在处理请求的子进程数 → 直观反映实时并发负载
• idle processes:空闲进程,说明有余量
• listen queue:等待进入 FPM 队列的请求数,非零说明 PHP 处理不过来,需调大pm.max_children
• slow requests:若开启 slow-log,显示超时请求次数
(补充)同时启用 Nginx 自身状态页作协同参考
PHP-FPM 状态反映后端处理层,Nginx 状态反映前端连接层,两者结合更全面:
- 确认 Nginx 编译时已含
--with-http_stub_status_module(多数发行版默认启用) - 添加 location:
location = /nginx-status {<br> stub_status on;<br> allow 127.0.0.1;<br> deny all;<br> access_log off;<br>} - 访问
/nginx-status查看:
• Active connections:当前 Nginx 持有的 TCP 连接总数(含 keepalive)
• accepts/handled/requests:连接与请求计数关系,判断是否丢请求
• 若 Active connections 远高于 active processes,可能说明 PHP 处理慢,请求在 Nginx 层堆积



















