报错是这么冒出来的。站点从 /var/www/old 搬到 /var/www/new,DNS 已经切换,访问首页返回 502,CDN 回源日志显示连接的是旧目录下的 php-fpm socket,早就被停掉了。
原因不止一个,得分开看。Nginx 的 root fastcgi_param 仍指向旧目录。少数情况下是php-fpm 的 listen 地址在迁移时换过,旧 socket 文件还在但无进程。
另外,CDN 缓存了 502 响应,修好后部分节点仍返回错误。
第一件事是查当前站点配置里的实际 root
nginx -T | grep -E "root |fastcgi_pass" | head
随后改到新目录与新 socket 并测试
fastcgi_pass unix:/run/php/php8.2-fpm-new.sock; root /var/www/new;
从服务器本地验证一次完整响应
curl -sI -H "Host: www.example.com" http://127.0.0.1/ | head -3
这台环境是别人交接的,不少默认值被动过,只能一项项核。
同事提醒我看一下最近一次发布,时间点确实对得上。
怎么算真的好了,看的是同一批现象。本地 curl 返回 200,CDN 回源日志里不再出现 connect failed,边缘各节点首页状态码全部为 200,TTFB 回到 300ms 以内。
这里还有个坑。迁移只改目录不改 socket 的情况很常见,重建目录后先跑一次 nginx -t 再 reload,避免配置半生效。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
