宝塔拨测博客拨测技术博客
宝塔拨测

502、503、504 分别是谁的问题?三个状态码各做一次全国拨测,附三步定位

502、503、504 三个码长得像,责任方完全不同:502 是网关收到了上游的无效响应,504 是网关等上游等到超时,503 是服务自己说「暂时不可用」。三者的共同点是——它们都由服务器侧发出,所以能返回 5xx,就说明网络是通的、机器也在工作。

但仅凭「知道含义」不足以定位。真正有用的问题是:这次 5xx 是全网都在报,还是只有几个地区在报?本文用宝塔拨测(t.bt.cn)对三个状态码各做了一次全国 HTTP 拨测,用分布数据回答这个问题。

502、503、504 分别是谁的问题

状态码 直译 谁发出的 一句话判断
502 Bad Gateway 网关错误 反向代理(Nginx 等) 上游回了,但回的内容无效
503 Service Unavailable 服务不可用 应用本身或网关 服务主动拒绝,过载/维护/后端全挂
504 Gateway Timeout 网关超时 反向代理 上游没回,等到超时

关键区别在中间那一列。502 和 504 都是网关在替上游「传话」,区别是传到了一个坏答复(502)还是根本没等到答复(504);503 则是服务明确表态「现在不接客」,它的后端可能是健康的,只是被限流、在重启、或在维护。

实测:同一个 5xx 在全国是什么样

对三个可复现的测试地址各发起一次网站测速(HTTP)拨测,采集时间 2026-10-27 14:39–14:42(北京时间)。三个目标的节点规模一致,状态码分布如下:

目标状态码 节点完成 返回到该状态码 成功率 覆盖地区
502 389 387 99% 59 个
503 390 389 99% 60 个
504 388 387 98.5% 60 个

三组数据呈现出同一个形态:几乎所有节点都返回了同一个状态码。以 502 为例,389 个成功节点里有 387 个拿到 502,另外各 1 个拿到 403 和 404——这两个是零星个例,不是趋势。

这个形态本身就是结论:当 5xx 在几十个地区同时、同码出现,问题在源站或应用,不在网络。 网络故障做不到让 59 个地区的探针整齐地收到同一个 502——线路不通会表现为连接失败、超时、丢包,而不是服务器礼貌地回一个状态码。

三者的耗时差异,比状态码本身更能说明位置

同一批目标的总耗时中位数差异明显:

状态码 总耗时中位数 p95 最快节点 最慢节点
502 535.7 ms 1505.2 ms 33.2 ms 6523.4 ms
503 249.7 ms 920.6 ms 16.5 ms 4452.7 ms
504 525.1 ms 1549.8 ms 32.7 ms 7172.1 ms

503 的中位数约为 502、504 的一半,这与三者的机制吻合:502 和 504 都要等上游(要么等到一个坏答复,要么等到超时),天然更慢;503 往往是服务器自己立刻拒绝,不用走完上游调用,天然更快。

这个规律可以用来反推:如果你看到一个 5xx 响应很快(几十到两三百毫秒),更可能是应用层直接拒绝(503 一类的过载/维护);如果明显偏慢、接近网关的超时阈值,则更像上游没回(504)或上游半死不活(502)。

同时注意 p95 和最慢节点:502 的 p95 已达 1505.2 ms,最慢节点 6523.4 ms。5xx 场景下的长尾比正常响应更长,这也解释了为什么用户体感是「转很久然后报错」而不是「立刻报错」。

运营商之间的差异依然存在

即使所有节点都收到 502,耗时也不是全网一样。同一次 502 拨测按运营商分组:

分组 节点数 平均耗时
电信 134 804.8 ms
移动 117 699.1 ms
联通 95 624.1 ms
港澳台 7 441.9 ms
海外 39 351.6 ms

电信与海外之间的差距超过一倍。这说明状态码判断「是不是源站的问题」,运营商数据判断「慢在哪条线」,两件事要分开看——不能因为「全网都是 502」就认为线路没有差异,也不能因为「电信慢」就认为 502 是电信造成的。

三步定位:先看分布,再看耗时,最后看失败节点

第一步,看状态码是否全网一致。

  • 几十个地区都是同一个 5xx → 源站或应用问题,去查 Nginx 错误日志和上游服务状态。
  • 只有少数地区 5xx → 查这些节点是否集中在某运营商/省份,以及响应 IP 是否落在 CDN 段。

第二步,看耗时落在哪一档。

  • 快(百毫秒级)→ 应用直接拒绝,查负载、限流、维护开关、后端进程是否存活。
  • 慢(接近网关超时)→ 上游没回或回得极慢,查上游服务是否卡死、数据库是否慢查询。
  • 长尾特别长 → 说明请求在超时边界上挣扎,用户会感到「卡很久才报错」。

第三步,看失败节点集中在哪。 本次 502 拨测有 4 个节点失败:湖北恩施电信域名解析超时、湖北武汉联通请求超时、陕西汉中移动请求超时、广西桂林电信任务超时。这些都是探针侧或链路侧的超时,不是目标返回了别的状态码。 少数节点失败不等于目标不可用,判断时要看失败原因的 message,而不是只看失败数。

三个常见误判

误判一:把「节点成功」当成「网站正常」。 成功只代表拿到了 HTTP 响应,502/503/504 都是成功的响应。必须同时看状态码。

误判二:看到 5xx 就去查 DNS 和防火墙。 5xx 恰恰证明网络和解析是通的——请求已经打到服务器并拿到了回应。这时候查 DNS 是浪费时间的。

误判三:用单个节点或单个地区的结果下结论。 本次 502 拨测里有 1 个节点返回 403、1 个返回 404,如果只看这两个节点,就会得出完全错误的结论。要看分布,不看个例。

怎么自己跑一次

打开宝塔拨测的网站测速页 t.bt.cn/http/,填入要测的地址发起拨测,结果页会给出各节点的 HTTP 状态码分布、成功率、响应时间与异常节点明细。判断顺序就按上面三步:先看状态码是否全网一致,再看耗时档位,最后看失败节点集中在哪里。

信息来源

状态码语义以宝塔官方文档 《使用宝塔拨测》 为准(该文档说明网站测速可查看「成功率、响应时间、状态码和异常节点」)。文中拨测数据为 2026-10-27 14:39–14:42(北京时间)对三个可复现测试地址的真实 HTTP 拨测结果,覆盖 59–60 个地区。拨测节点池与线路状况随时变化,上述数值仅代表采集时刻的情况。

常见问题

502 和 504 到底有什么区别?

两者都是网关(反向代理)发出的,区别在「上游有没有回」:502 Bad Gateway 是网关收到了上游的响应,但响应本身无效或不符合预期;504 Gateway Timeout 是网关等上游等到超时,压根没拿到响应。所以 502 说明上游还活着但回错了,504 说明上游没在时限内回。

503 是不是就代表服务器挂了?

不一定。503 Service Unavailable 表示服务当前不可用,常见于过载、维护中、或后端全部不可用。服务器本身的进程和网络可能都还正常,只是应用层拒绝提供服务。所以看到 503 先查应用的负载和维护状态,而不是先去查服务器是否宕机。

5xx 是网站挂了还是网络问题?

5xx 是服务器侧产生的响应。能返回 5xx,说明网络是通的、服务器也在工作,只是它处理请求时出了问题。判断依据是全国节点是否一致:本文实测三个状态码在 59–60 个地区表现一致,这种情况下问题在源站;只有少数地区出 5xx 才要怀疑线路或 CDN 边缘节点。

拨测显示「节点成功」,页面却打不开,是什么情况?

「节点成功」只表示探针连上了服务器并拿到了 HTTP 响应,不代表响应是正常的。返回 502、503、504 都算成功拿到响应。所以看结果要同时看两个维度:成功/失败回答「连没连上」,状态码回答「服务器回了什么」。

只有部分地区返回 5xx,该怎么查?

先看返回 5xx 的节点是否集中在特定运营商或省份,再看这些节点解析到的响应 IP 是否落在 CDN 的地址段。集中在小范围通常是 CDN 某个边缘节点或某条线路的问题;全网一致则回到源站和应用本身。

怎么自己复现文中的测试?

打开宝塔拨测的网站测速页 https://t.bt.cn/http/ ,输入要测的地址发起拨测,结果页会给出各节点的 HTTP 状态码分布、响应时间和失败节点明细。