排查 Cloudflare 521/522,区分源站拒绝与连接超时,核对 DNS、端口、SSL、防火墙、Cloudflare IP 和源站容量。
先按错误码分层:Cloudflare 521 Web server is down 表示源站拒绝了 Cloudflare 的连接,522 Connection timed out 表示 Cloudflare 连接源站时超时。进入 Cloudflare 控制台选择域名,先看“分析和日志 → HTTP 错误”与错误页面的 Ray ID、时间和机房,再到“DNS → 记录”核对 A/AAAA/CNAME 指向。不要先暂停代理、切“灵活”SSL 或把源站防火墙开放给全网。
查询 DNS、端口和日志通常不收费;Cloudflare 部分日志功能、云服务器扩容、带宽与安全服务可能收费。521/522 不会直接删除站点数据,但重启数据库、清空防火墙、回滚服务器或错误切换源站会造成中断或数据风险。变更前记录原 DNS、SSL 模式、安全组和防火墙规则。
521 和 522 到底差在哪里
| 错误 | Cloudflare 已看到什么 | 首查方向 |
|---|---|---|
| 521 | 源站主动拒绝连接 | Nginx/Apache 未监听、服务崩溃、防火墙拒绝、SSL 模式对应端口不通 |
| 522 | 建立连接或发出请求后等待超时 | Cloudflare IP 被丢弃、源站过载、路由/丢包、连接跟踪或队列耗尽 |
Cloudflare 官方在 2026 年 9 月 3 日核验的说明中,将 522 分为两类超时:TCP 建连阶段未在约 19 秒内收到 SYN+ACK,或连接建立后约 90 秒内未确认请求。这个数值用于理解 Cloudflare 边缘判断,不是建议把源站超时统一调到更大。
先保存一份可复核的故障现场
- 记录完整 URL、错误码、Ray ID、发生时间与时区,确认是全部路径还是单个接口。
- 从 Cloudflare DNS 页面抄下当前源站记录,核对是否还有旧 IP、错误 AAAA 或指向 Cloudflare 自身地址。
- 查看源站同一时间的访问日志、错误日志和系统监控;521 可能没有 HTTP 访问日志,因为连接尚未进入 Web 服务。
- 确认是所有访客失败、特定地区失败,还是只有定时任务/上传等长请求失败。
不要只凭浏览器截图判断。Cloudflare 生成的错误页与源站自己返回的 5xx 不完全相同,响应头、Ray ID 和日志时间能帮助确认错误来自哪一层。
绕过代理测试源站,但保留正确域名和 SNI
下面命令把域名临时解析到源站 IP,只影响本次 curl,不会改公开 DNS。将域名与 IP 替换为真实值;命令会直接访问源站,测试来源应被源站允许。
curl -I --connect-timeout 10 --resolve www.你的域名:443:源站IP https://www.你的域名/
curl -I --connect-timeout 10 -H 'Host: www.你的域名' http://源站IP/
HTTPS 测试成功而 Cloudflare 仍报错,重点检查 Cloudflare IP 放行、源站连接容量和 Cloudflare SSL 模式。两条都失败则先修源站服务、证书、监听或路由。直接访问 IP 得到默认证书或默认站点不代表域名配置失败,必须带正确 Host/SNI 测试。
521:检查服务是否在正确端口监听
登录源站执行只读检查。Cloudflare 使用“灵活”模式时回源通常走 80;“完全”或“完全(严格)”模式需要源站 443 可用。长期生产站优先使用有效源站证书与“完全(严格)”,不要为了消除 521 降级到明文回源。
sudo ss -lntp | grep -E ':(80|443)\b'
sudo systemctl status nginx apache2 httpd --no-pager
sudo journalctl -u nginx --since "30 minutes ago" --no-pager
curl -I http://127.0.0.1/
没有监听时查看配置测试和服务日志;仅监听 127.0.0.1 时外部无法连接;服务持续崩溃应先处理配置、内存或磁盘问题。源站本地正常而 Cloudflare 521,检查主机防火墙、宝塔防火墙、Fail2ban、云安全组和上游安全服务是否拒绝 Cloudflare 来源。
521/522 都要核对 Cloudflare IP 放行
只从 Cloudflare 官方 IP 列表获取当前网段,IPv4 与 IPv6 都要按实际代理流量核对。不要从博客复制过期列表,也不要只放行日志里碰巧出现的一个地址。新增规则前导出现有防火墙与安全组配置,先小范围验证,再按官方完整列表实施。
如果源站只允许 Cloudflare 访问,还应保留受控的运维入口和健康检查来源。绝不能用“临时排障”为理由把 SSH、数据库和全部端口向 0.0.0.0/0 开放;Web 回源通常只涉及实际使用的 80/443。
522:源站没拒绝,但没有及时回应
先看 CPU、内存、磁盘 I/O、连接数和 Web/PHP 进程是否在错误时段饱和。再检查 SYN backlog、文件描述符、连接跟踪表和防火墙丢包。只把 Nginx 或 PHP 超时加大,无法解决 TCP 建连阶段的 522。
uptime
free -h
df -hT
sudo ss -s
sudo journalctl -k --since "30 minutes ago" --no-pager
sudo conntrack -S
conntrack 命令需要对应工具且通常需要 sudo;没有安装时不要为了排障随意添加来源不明软件。若内核日志出现表满,可参考Linux conntrack 表满排查。只有特定动态接口失败时,还要查上游应用、数据库和请求队列,避免把应用慢统一归为网络问题。
DNS、IPv6 和多源站分支
Cloudflare DNS 中旧 A 记录、不可达 AAAA、错误的负载均衡池或 CNAME 目标,会让边缘访问错误源站。逐个核对实际生产 IP,不要用 ping 成功代替 80/443 与正确域名验证。多源站环境要分别测试每个源站,并在 Cloudflare 健康检查或源站负载均衡中确认故障节点是否仍接收流量。
如果刚完成 CDN 或 DNS 迁移,继续参考CDN CNAME 与解析异常排查。若源站 HTTPS 本身配置错误,先核对Nginx 反向代理与 HTTPS 配置,不要反复切换 Cloudflare 加密模式。
修复后怎样验收和回退
- 使用
--resolve直接测试源站,再通过正常公共 DNS 测试 Cloudflare,两条路径都应返回预期状态。 - 从至少两个授权网络检查首页、静态资源、登录和一个动态接口,确认不再出现 521/522。
- 观察 Cloudflare HTTP 错误、源站连接、CPU、内存、I/O 与日志至少覆盖一个真实流量周期。
- 复核防火墙只放行必要端口和官方 Cloudflare 网段,没有留下全网临时规则。
变更无效时,按记录恢复原 DNS、SSL 模式和防火墙规则;不要同时修改三层导致无法确定原因。若源站仍不稳定,将流量切回已验证的旧源站或维护页,并保护数据库写入。源站修复完成后再逐步恢复代理流量。
官方资料
以上资料于 2026 年 9 月 3 日核验。Cloudflare 菜单、错误分析能力和 IP 网段可能变化,执行时以当前官方页面为准。

