记录一次项目部署后 Nginx 无规律 502 Bad Gateway 问题的排查过程
在一台 Linux 服务器上部署了一个 使用 Next.js 开发的前端网站,网站首次上线后 无规律地出现 502 Bad Gateway 错误 问题极其诡异且 无法稳定复现
架构如下:
-
Nginx:作为反向代理
-
Next.js(Node.js):提供 SSR / 页面服务
-
PM2:托管 Node 服务
-
域名:通过服务商 DNS 解析到服务器公网 IP
问题表现
-
网站在多数时间可以正常访问
-
某些时刻会突然:
-
页面加载明显变慢
-
随后直接返回 502 Bad Gateway
-
-
刷新几次后又可能恢复正常
-
无固定触发条件(访问路径 / 用户 / 时间点 都不固定)
排查过程
Nginx 配置排查
第一反应是 Nginx 配置异常
-
proxy_pass 错误
-
超时参数过短
-
header 转发不完整
但查看实际配置后,发现非常简单、标准:
# nginx 就这么一段简单的配置,转发到 nextjs 服务
location / {
proxy_pass http://127.0.0.1:3001/;
proxy_set_header Host $http_host;
proxy_set_header X-real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-for $remote_addr;
}
随后查看 error.log,发现了关键线索,日志中偶尔出现如下错误:
upstream timed out
connect() failed (111)
这类错误 通常意味着 Nginx 无法及时连接到上游服务
因此初步怀疑 Next.js 服务存在卡顿或异常阻塞
Next.js 服务排查(PM2)
转而排查 Node / Next.js 服务本身
-
使用
pm2 logs查看实时日志-
日志非常干净
-
没有任何报错、异常、OOM 或未捕获异常
-
-
重启服务验证:
pm2 restart xxx
- 在服务器本地直接访问服务:
curl http://127.0.0.1:3001
-
响应迅速
-
页面正常返回
此时可以基本排除 Next.js 服务本身存在持续性异常
再次回到 Nginx,观察实时访问行为
由于问题依旧存在,于是回到原点,从“请求是否真的到达服务器”这个角度重新审视。
采取的方式是:
-
浏览器不断刷新页面
-
同时实时查看 Nginx access.log
正常请求时的日志
XX.152.XX.194 - - [25/Jan/2025:17:52:59 +0800] "GET /assets/images/favicon.ico HTTP/2.0" 200 962025 "https://www.xxx.com" "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36 T7/6.3"
异常现象(关键)
当浏览器返回 502 Bad Gateway 时:
-
Nginx access.log 没有任何记录
-
error.log 也没有新的输出
-
仿佛这次请求从未到达服务器
502 并不是 Nginx 返回的,而是在到达服务器之前就已经失败了
排查域名与 DNS 配置
既然请求没有进入服务器,那么问题很可能出现在:
-
DNS 解析
-
CDN / 代理层
-
服务商网络
于是检查域名解析配置,结果发现一个异常情况:
DNS 中存在十几条重复的 A 记录,且全部指向同一个 IP
虽然表面看起来:
-
指向同一 IP
-
似乎“结果是一样的”
但这并不是一个正常或推荐的配置方式。
修复与验证
处理方式:
-
删除所有重复的 A 记录
-
仅保留 一条正确的解析
-
等待 DNS 缓存刷新
结果:
-
网站访问恢复稳定
-
再未出现 502 Bad Gateway
-
Nginx / PM2 日志均无异常
问题原因分析
综合现象与修复结果,问题极有可能出在 DNS 层面。虽然多条 A 记录指向同一 IP 不会改变最终解析结果,但在实际网络请求过程中,可能会在以下层面放大问题:
-
DNS 解析缓存行为异常
-
客户端 / ISP 的解析轮询或 hash 失衡
-
TCP 连接复用(keepalive)异常
-
连接池命中率降低
-
某些请求长时间阻塞,最终超时
这些问题叠加后,最终表现为:
请求在客户端或网络层被卡死,根本没有到达服务器,浏览器只能收到一个模糊的 502 Bad Gateway
作者:https://blog.xn--rpv331d.com/望舒
链接:https://blog.xn--rpv331d.com/望舒/blog/138
转载请保留文章出处...
