PHP-FPM 8.0 开启状态页需两步:一是在 pool 配置中设置 pm.status_path = /php_status 并重启 php8.0-fpm;二是在 Nginx 中用 location = /php_status 精确代理至 FPM,配置 fastcgi_param SCRIPT_FILENAME $fastcgi_script_name 并限制 IP 访问,最后通过 curl http://127.0.0.1/php_status?json 验证 JSON 输出。

PHP-FPM 8.0 开启状态页,核心是两步:配置 PHP-FPM 启用状态接口,再通过 Web 服务器(如 Nginx 或 Apache)将其暴露为可访问的 HTTP 路径。整个过程无需额外脚本或扩展,纯官方原生支持。
1. 在 PHP-FPM 配置中启用 status_path
编辑你的 PHP-FPM 池配置文件(通常是 /etc/php/8.0/fpm/pool.d/www.conf 或类似路径),在 [www] 段内添加或取消注释以下行:
-
pm.status_path = /php_status(推荐使用简洁路径,如
/php_status或/fpm-status) - 该路径可自定义,但必须以
/开头,且不能与现有 PHP 脚本路径冲突 - 确保该配置位于正确的 pool 段下(比如
[www]),否则不生效
保存后,重启服务:sudo systemctl restart php8.0-fpm
2. 配置 Nginx 暴露状态页(以 Nginx 为例)
在对应 server 块中添加 location 规则,将请求代理到 PHP-FPM 的 FastCGI 接口:
立即学习“PHP免费学习笔记(深入)”;
- 推荐用精确匹配:
location = /php_status { ... },避免路径误匹配 - 关键配置项包括:
fastcgi_pass 127.0.0.1:9000(或 Unix socket 如unix:/run/php/php8.0-fpm.sock) - 必须设置:
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;(注意不是$document_root$fastcgi_script_name,因为状态页不是真实文件) - 建议加 IP 限制提升安全性,例如:
allow 127.0.0.1; deny all;
示例片段:
location = /php_status {
allow 127.0.0.1;
deny all;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
保存后重载 Nginx:sudo nginx -s reload
3. 验证状态页是否可用
执行命令测试(请替换为你实际配置的路径):
-
curl http://127.0.0.1/php_status→ 应返回文本格式基础指标 -
curl "http://127.0.0.1/php_status?json"→ 返回 JSON 格式(Zabbix 主动模式依赖此格式) -
curl "http://127.0.0.1/php_status?full"→ 查看每个 worker 进程详情(含 PID、state、request URI 等)
若返回 502 Bad Gateway,检查 PHP-FPM 是否运行、socket/端口是否匹配、Nginx 是否有权限读取 socket 文件;若返回 404,确认 location 路径与 pm.status_path 完全一致(包括大小写和斜杠)。
4. 注意事项与安全提醒
状态页会暴露进程数、请求 URL、内存峰值等敏感信息,务必限制访问来源:
- 生产环境禁止开放给公网,仅允许 Zabbix Agent 所在主机或本地回环访问
- 不要在
pm.status_path中使用带参数的路径(如/status?json),它只接受静态路径 - Zabbix 官方模板要求 HTTP 明文访问、无重定向——确保 Nginx 不对
/php_status做 301/302 跳转 - PHP-FPM 8.0 已全面支持
?json和?full参数,无需额外补丁



















