开启 PHP-FPM status 页面需要在进程池配置文件中设置 pm.status_path 参数,并在 Web 服务器(如 Nginx 或 Apache)中配置将该路径请求转发给 PHP-FPM 处理。此功能仅建议在内网或受控环境开启,直接暴露到公网存在信息泄露风险。
先说结论:PHP-FPM 状态页通过特定配置路径暴露进程指标,配置核心在于修改 pool 配置文件并配合 Web 服务器做访问控制。
- 适合:需要监控 PHP 进程活跃度、排查慢请求或集成监控系统的场景。
- 先准备:确认 PHP-FPM 版本支持 status 页,备份原有配置文件,规划访问控制策略。
- 验收:通过 curl 命令访问指定路径能返回进程数据,且外网无法直接访问该路径。
命令速用版
在 PHP-FPM 进程池配置文件(通常为 www.conf)中添加或修改以下配置项,即可定义状态页访问路径。
pm.status_path = /status若使用 Nginx,需在 server 配置块中添加 location 规则,将请求 FastCGI 转发给 PHP-FPM。
location /status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}为什么会这样
PHP-FPM 内置了状态页功能,用于输出当前进程池的运行指标,无需安装额外扩展。
该功能由 FPM 进程直接处理,绕过 PHP 脚本执行,因此能反映进程管理器本身的负载情况。配置 pm.status_path 后,FPM 会监听该 URI 请求并返回格式化数据,常用于配合监控系统(如 Prometheus)或人工排查进程堆积问题。
分步处理
按照以下顺序修改配置,确保每一步生效后在进行下一步,避免服务中断。
步骤 1:定位配置文件
找到 PHP-FPM 的进程池配置文件,常见路径为 /etc/php/版本/fpm/pool.d/www.conf 或 /etc/php-fpm.d/www.conf。
步骤 2:开启状态路径
编辑配置文件,查找 pm.status_path 项。如果该行被注释(前方有分号),去掉分号并设置路径,例如:
pm.status_path = /fpm-status保存文件后,重启 PHP-FPM 服务使配置生效。
步骤 3:配置 Web 服务器
在 Nginx 或 Apache 中配置该路径的转发规则。Nginx 示例如下,确保 fastcgi_pass 地址与 PHP-FPM 监听地址一致:
location /fpm-status { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; }步骤 4:设置访问控制
为防止信息泄露,务必限制访问 IP。Nginx 中可使用
allow和deny指令,仅允许内网 IP 访问:allow 127.0.0.1; allow 192.168.1.0/24; deny all;怎么验证是否生效
使用 curl 命令在服务器本地访问配置的路径,检查是否返回进程状态数据。
执行以下命令,若返回包含
pool、process manager等字段则配置成功:curl http://127.0.0.1/fpm-status若需要查看详细信息,可在 URL 后添加
?full参数。同时尝试从外网 IP 访问,确认返回 403 Forbidden 或连接被拒绝,以验证访问控制生效。常见坑
配置过程中容易忽略权限控制和路径冲突,导致安全风险或服务异常。
- 安全风险:未配置 IP 白名单直接将状态页暴露到公网,攻击者可获取服务器内部进程信息。
- 路径冲突:设置的
pm.status_path与现有业务路由重复,导致正常页面无法访问或状态页无法加载。 - 权限不足:Web 服务器用户无权访问 PHP-FPM Socket 文件,导致转发请求时返回 502 Bad Gateway。
常见问题
默认的状态页路径是什么?
PHP-FPM 没有强制默认路径,必须在配置文件中显式设置 pm.status_path 才能启用。
开启状态页会影响性能吗?
正常监控访问对性能影响可忽略,但频繁请求 ?full 参数会消耗少量 CPU 资源。
为什么访问状态页返回 404?
通常是因为 Web 服务器未正确配置 location 规则,请求未被转发给 PHP-FPM 处理。
参考来源
- PHP Manual - FPM Configuration, 页面标题:FPM Configuration, URL: https://www.php.net/manual/en/install.fpm.configuration.php
- PHP Manual - FPM Status, 页面标题:FPM Status, URL: https://www.php.net/manual/en/fpm.status.php