Cloudflare 的 5xx 状态码怎么读

工具相关 ·

站点接入 CDN 之后,错误页面上开始出现一些「查不到定义」的状态码:520、522、524。去 RFC 里翻,标准 5xx 只到 511 左右,这些数字并不存在。它们不是标准码,而是 CDN 厂商自己扩展的私有码,但在真实运维里出现的频率相当高。

这批码的共同含义

Cloudflare 的 520 到 530 这一系列状态码,含义可以概括成一句话:Cloudflare 与源站之间的链路出了问题。它们由 Cloudflare 的边缘节点产生,表示边缘节点在尝试回源时失败了。

这一点决定了排查方向。看到这类码时,问题一定在源站侧,Cloudflare 本身只是如实转达回源失败的结果。去翻 CDN 的配置、去提工单问「为什么 CDN 挂了」,通常都是白费力气——真正要改的是源站。

521、522、523:根本连不上

这三个码都表示连接没建立起来,区别在于失败在哪一步。

521 Web Server Is Down 表示源站拒绝了连接。TCP 层收到了 RST,说明有东西在监听但不愿意接受连接,或者被防火墙直接拒绝。常见原因是源站的 Web 服务没启动、崩了,或者防火墙把 Cloudflare 的回源 IP 段拦掉了。

522 Connection Timed Out 表示 TCP 握手超时。连 SYN 都没有回应,说明源站的网络层面不可达,可能是路由问题、安全组只放行了特定来源,或者防火墙在做静默丢包。

523 Origin Is Unreachable 表示 DNS 解析出来的源站地址不可达。这一条经常出现在源站域名解析被改错、或者解析到了一个内网地址的情况下。

三者的处理动作很接近:先确认源站服务在跑,再从 Cloudflare 之外的一台机器上试着访问源站域名和 IP,最后检查防火墙与安全组是否放行了 CDN 的回源地址段。

524:连上了,但等太久

524 是这一系列里最特殊的一个,因为连接是成功的,请求也送到了源站,只是源站响应得太慢。

Cloudflare 在回源时有一个等待上限,超过之后就会断开并返回 524。这个上限不是可以随便调大的参数,免费版基本没有调整空间。因此 524 的正确处理方式只有一个:优化后端。

具体要查的还是那几件事——慢查询与索引、没有设置超时的外部调用、锁竞争、以及处理耗时接近上限的长尾请求。如果确实存在必须跑很久的任务,应该改成异步处理:立刻返回一个任务 ID,让客户端轮询或等回调,而不是让一个 HTTP 请求挂在回源链路上等两分钟。

525 和 526:TLS 握手阶段的问题

525 表示 SSL 握手失败,源站与 Cloudflare 之间没能协商出加密通道。526 表示源站的证书无效,常见于证书过期、使用了自签名证书、或者证书里的域名与实际访问的域名不匹配。

这两个码的排查入口是 CDN 面板里的 SSL/TLS 加密模式。常见的三种模式里,「Flexible」只加密浏览器到边缘这一段,回源是明文;「Full」要求回源也用 HTTPS 但不校验证书;「Full (Strict)」既要求 HTTPS 也校验证书。如果源站用的是自签证书,选「Full」可以绕过校验,选「Full (Strict)」就会直接报 526。

520 和 530

520 表示源站返回了 Cloudflare 无法理解的内容,比如空响应、响应头不合法、或者连接被异常中断。这类问题多半能在源站的错误日志里找到对应的异常。

530 表示 DNS 解析失败,通常是源站域名解析异常,或者配置了 Cloudflare 的 Origin Rules 但目标主机名解析不出来。

排查清单

  • 先确认一个前提:这批码都表示回源失败,问题在源站侧
  • 521、522、523 属于「连不上」,检查服务进程、防火墙与安全组、源站 DNS
  • 524 属于「连上了但太慢」,只能优化后端或改成异步任务
  • 525、526 属于 TLS 问题,先看加密模式,再查源站证书的有效期与域名匹配
  • 520 去源站日志找异常响应,530 去查源站域名解析
  • 从 Cloudflare 之外的一台机器独立验证源站是否可达,避免被 CDN 的缓存与健康检查误导
阅读 13