如何配置 PHP-FPM 的 ping.path 用于健康检查监控?

文章导读
配置 PHP-FPM 的 ping.path 需要在 pool 配置文件中设置路径,并在 Web 服务器中放行该路径直接代理给 FPM 套接字。适用场景为负载均衡健康检查或进程存活监控,风险边界是必须限制访问来源防止信息泄露。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

配置 PHP-FPM 的 ping.path 需要在 pool 配置文件中设置路径,并在 Web 服务器中放行该路径直接代理给 FPM 套接字。适用场景为负载均衡健康检查或进程存活监控,风险边界是必须限制访问来源防止信息泄露。

先说结论:ping.path 是 PHP-FPM 内置的健康检查接口,配置后需配合 Web 服务器规则放行,默认返回 pong 字符串。

  • 适合:K8s 存活探针、Nginx 上游健康检查、Zabbix 自定义监控。
  • 先准备:确认 php-fpm 池配置文件路径,通常位于 /etc/php/*/fpm/pool.d/。
  • 验收:使用 curl 请求配置路径,预期返回 HTTP 200 和 pong 内容。

命令速用版

查看当前 ping.path 配置:

grep -r \"ping.path\" /etc/php/*/fpm/pool.d/

测试连通性(假设路径为 /ping):

curl -o /dev/null -w \"%{http_code}\" http://127.0.0.1/ping

重载 PHP-FPM 配置:

systemctl reload php-fpm

为什么会这样

ping.path 是 PHP-FPM 进程管理器直接处理的请求,不经过 PHP 脚本解释器。配置该路径后,FPM 主进程会拦截匹配该 URI 的请求并直接返回 pong,用于判断 FPM 进程是否存活且可接受连接。这与执行 PHP 脚本不同,即使所有 PHP worker 忙满,只要主进程正常,ping 请求通常仍能响应。

分步处理

步骤 1:修改 PHP-FPM 池配置

找到 pool 配置文件,例如 /etc/php/8.1/fpm/pool.d/www.conf,取消注释或添加 ping.path 指令。

ping.path = /ping

步骤 2:配置 Web 服务器代理

以 Nginx 为例,需要添加 location 规则将请求转发给 FPM 套接字,且不传递 SCRIPT_FILENAME。

location = /ping {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    allow 127.0.0.1;
    deny all;
}

步骤 3:重载服务

如何配置 PHP-FPM 的 ping.path 用于健康检查监控?

先重载 PHP-FPM 使配置生效,再重载 Nginx 应用路由规则。

systemctl reload php-fpm
systemctl reload nginx

怎么验证是否生效

在服务器本地执行 curl 命令,检查状态码和响应体。

curl http://127.0.0.1/ping

正常响应内容应为纯文本 pong。如果返回 404,检查 Nginx location 配置;如果返回 403,检查 allow/deny 规则;如果返回 502/504,检查 FPM 套接字权限或进程状态。

常见坑

1. 混淆 ping.path 和 pm.status_path:前者用于存活检查返回 pong,后者用于状态监控返回详细指标,配置指令不同。

2. 权限开放过大:不要将 ping 路径暴露在公网,虽然不执行脚本,但暴露 FPM 可达性可能辅助攻击者判断后端状态。

3. Web 服务器未放行:仅在 FPM 配置 ping.path 而不配置 Nginx/Apache 转发规则,会导致 404 错误,因为 Web 服务器默认将其当作静态文件处理。

常见问题

ping.path 和 pm.status_path 有什么区别?

ping.path 仅返回 pong 用于判断存活,pm.status_path 返回 JSON 或 HTML 格式的详细进程状态数据。

默认配置下 ping.path 是什么?

不同发行版默认值不同,常见默认为 /ping 或注释状态,需查看 pool 配置文件确认。

健康检查返回 502 怎么办?

检查 PHP-FPM 进程是否运行,确认 fastcgi_pass 指向的套接字路径与 Nginx 配置一致。

参考来源

PHP Manual - FPM Configuration
URL: https://www.php.net/manual/en/install.fpm.configuration.php