事情本身不复杂,线索都在日志里。把 PHP 从 web 机器拆到独立机器后,FPM 监听 0.0.0.0:9000,nginx 在 10.0.5.20 上配 fastcgi_pass 10.0.5.10:9000,reload 后所有页面五零二,FPM 自己的日志里干干净净,什么记录都没有。
第一反应是「两台机器之间的安全组没有放行 9000,握手在 SYN 阶段就被丢」,验证下来不成立。
排查方向其实有限,先把可能性排一排。pool 里 listen.allowed_clients 还写着 127.0.0.1,别的主机连上来被直接拒绝。还有一种是listen 写成了 127.0.0.1:9000,只监听本机,外部连过来端口都不通。
少数情况下是nginx 里 fastcgi_pass 的地址写错,指向了已经不用的旧机器。
第一件事是确认端口有没有在对外监听
ss -lntp | grep 9000
然后看白名单与监听地址的写法
grep -E '^listen' /etc/php-fpm.d/www.conf
接着把前端机器加进白名单并重新加载
sed -i 's/^listen.allowed_clients.*/listen.allowed_clients = 127.0.0.1,10.0.5.20/' /etc/php-fpm.d/www.conf && systemctl reload php-fpm
从前端机器直接探端口确认连通
nc -zv 10.0.5.10 9000
怎么算真的好了,看的是同一批现象。nc 探测显示 9000 端口开放,nginx 请求 php 页面返回 200,FPM 的 error.log 开始正常记录请求,五零二归零。
提醒一点。拆机器时最容易漏白名单和监听地址这两项,它们拒绝得干净利落,反而让日志里什么都看不到。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
