502 不是服务器整体挂了,而是挡在前面的反向代理(多数是 Nginx)连不上后面的程序。网站打不开显示 502 怎么办?先看代理报的是「连接被拒绝」还是「等待超时」,再按后端进程、资源占用、超时配置逐层查,一般十分钟内能定位。
502 到底是谁报的错
502 Bad Gateway 的含义是:代理成功收下了用户请求,转发给后端时没拿到合法响应。常见就四种:
- 后端进程崩了或被系统杀掉,端口没人监听
- 后端还在跑,但处理时间越过代理的超时上限
- 后端监听的地址、端口和代理配置里写的对不上
- 服务器 CPU 或内存打满,连接排队超时
分辨方法很简单:先读代理的错误日志,里面写的是 connect() failed 还是 upstream timed out,这两种的修法完全不同。
第一步:读代理日志,确定是哪一种 502
- 登录服务器,常见日志路径是
/var/log/nginx/error.log,先执行tail -n 50 /var/log/nginx/error.log看最后 50 行。
- 出现
Connection refused:后端没起来,跳到第二步。
- 出现
upstream timed out:后端在跑但太慢,跳到第三步和第四步。
- 出现
no live upstreams:所有后端节点都被判不可用,可先重启后端进程恢复访问,再查根因。
避坑:别第一反应就 reboot。重启能让站点恢复,但日志会被冲淡,下次照犯。动手前先把日志复制一份留档。

第二步:确认后端进程还活着
systemctl status 服务名看状态,active (running)才算正常
ss -lntp | grep 端口号确认进程真的监听在配置写的端口上
- 状态是
failed,用journalctl -u 服务名 -n 100看退出原因
常见的三种情况:端口写错(代理转发 3000,程序监听 8000);进程被内存不足杀掉,dmesg | grep -i kill 能看到记录;端口被别的进程占用。改完配置先 nginx -t 测语法,再 systemctl reload nginx 生效。
第三步:服务器 CPU 占用高怎么排查
日志显示超时,或 top 里 CPU 长期贴近 100% 时,按这个顺序看:
top按P排序,记下占用最高的 PID。
top -H -p PID看是哪个线程在跑,再用ps -p PID -o pid,ppid,cmd确认是不是你的业务程序。
- 是业务程序:看有没有慢查询、死循环,或者两个定时任务撞在同一分钟。
- 不是业务程序:警惕被挖矿程序顶替,特征是全核跑满、进程名像随机字符串、占用长期稳定在 90% 以上。
- 临时止血可以
renice降优先级,但这不解决根因。
顺手看一眼磁盘:df -h 写满会让数据库写入卡死,表现和 CPU 高很像。

第四步:超时和并发上限别配太小
- 代理转发超时:
proxy_read_timeout默认 60 秒,接口本身慢的可以调到 120~300 秒
- 后端进程数:PHP-FPM 的
pm.max_children、Node 实例数,按可用内存算,别超过内存撑得住的数量
- 数据库连接数:连接池打满会出现「进程活着但所有请求都超时」
判断标准:把超时统一调大一档,如果 502 变成「慢但能打开」,问题就在性能,不在配置。
常见问题(FAQ)
502 和 504 有什么区别?
502 是代理没拿到合法响应,多半后端没起来;504 是代理等后端超时,说明后端太慢。两者修法不同。
重启服务器能解决 502 吗?
能恢复访问,但根因还在。重启前先备份错误日志,否则下次排查没有线索。
免费工具能监控 502 吗?
可以。用免费监控服务做五分钟一次的可用性探测,或开云厂商自带的告警就够用。付费版本多的是多节点探测和更细的响应时间报表。
HTTPS 站点报的错和 HTTP 一样吗?
排查思路一样。区别是证书配错会握手失败,浏览器通常不会报 502,所以看到 502 就先排除证书问题。网站打不开显示 502 怎么办,本质就是把「日志 → 进程 → 资源 → 配置」走一遍,九成问题出在前两步。
最后更新:2026-10-15(工具界面、价格与政策可能调整,请以官方页面为准)。