现场是这样的。站点整个返回 502,错误日志里写没有可用的上游节点,可后端进程明明在跑,端口也能连通。

排查方向其实有限,先把可能性排一排。健康检查判定失败,节点被临时摘除;后端响应超时时间设得太短,正常请求也被判失败;上游地址解析失败或者写错端口。

第一件事是看上游状态和失败原因

grep -n 'no live upstreams' /var/log/nginx/error.log

直接测后端连通性

curl -I http://127.0.0.1:9000/health

随后核对上游配置和失败判定

nginx -T | grep -A5 upstream

调整失败重试与超时

grep -n max_fails /etc/nginx/conf.d/app.conf

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

同一份数据我导出了两份,一份留底,一份拿来试。

恢复的判定其实很直接。上游节点恢复为可用,502 消失,健康检查连续通过。

这里还有个坑。健康检查接口本身超时也会把节点摘掉,判定参数要结合后端真实响应时间设置,别照抄模板。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189