Cloudflare 521 和 522 怎么排查?源站拒绝、连接超时与防火墙修复

先按错误码区分拒绝与超时,再核对源站、Cloudflare IP 和 DNS

排查 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 边缘判断,不是建议把源站超时统一调到更大。

先保存一份可复核的故障现场

  1. 记录完整 URL、错误码、Ray ID、发生时间与时区,确认是全部路径还是单个接口。
  2. 从 Cloudflare DNS 页面抄下当前源站记录,核对是否还有旧 IP、错误 AAAA 或指向 Cloudflare 自身地址。
  3. 查看源站同一时间的访问日志、错误日志和系统监控;521 可能没有 HTTP 访问日志,因为连接尚未进入 Web 服务。
  4. 确认是所有访客失败、特定地区失败,还是只有定时任务/上传等长请求失败。

不要只凭浏览器截图判断。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 加密模式。

修复后怎样验收和回退

  1. 使用 --resolve 直接测试源站,再通过正常公共 DNS 测试 Cloudflare,两条路径都应返回预期状态。
  2. 从至少两个授权网络检查首页、静态资源、登录和一个动态接口,确认不再出现 521/522。
  3. 观察 Cloudflare HTTP 错误、源站连接、CPU、内存、I/O 与日志至少覆盖一个真实流量周期。
  4. 复核防火墙只放行必要端口和官方 Cloudflare 网段,没有留下全网临时规则。

变更无效时,按记录恢复原 DNS、SSL 模式和防火墙规则;不要同时修改三层导致无法确定原因。若源站仍不稳定,将流量切回已验证的旧源站或维护页,并保护数据库写入。源站修复完成后再逐步恢复代理流量。

官方资料

以上资料于 2026 年 9 月 3 日核验。Cloudflare 菜单、错误分析能力和 IP 网段可能变化,执行时以当前官方页面为准。

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区