Skip to content

Cloudflare 522 错误排查与处理指南

适用场景:使用 Cloudflare 或其他 CDN 后,前端访问返回 522 Connection Timeout 错误

一、什么是 522 错误

522 错误表示 Cloudflare 无法与源服务器建立 TCP 连接。CDN 节点已经接收到了用户请求,但当它尝试回源拉取数据时,TCP 握手超时失败。

json
{
  "type": "https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/",
  "title": "Error 522: Connection timed out",
  "status": 522,
  "detail": "Cloudflare could not establish a TCP connection to the origin server.",
  "error_name": "connection_timeout",
  "error_category": "origin",
  "retryable": true,
  "retry_after": 120
}

关键信息:

字段含义
error_category: origin问题出在源服务器,不是 Cloudflare 的问题
retryable: true该错误可以重试,等待 120 秒后再次尝试
owner_action_required: true需要网站管理员介入处理

二、常见原因

1. 源服务器进程异常(最常见)

  • Docker 容器停止运行或处于 restart 循环
  • Gunicorn/Uvicorn 进程崩溃或被 OOM Killer 终止
  • 宿主机资源耗尽(CPU/内存/磁盘满)

2. 防火墙/安全组拦截

  • 服务器防火墙(iptables、ufw、宝塔安全组)未放行 Cloudflare IP 段
  • 云厂商安全组规则限制了回源端口
  • DDoS 防护服务误拦截了 CDN 回源请求

3. SSL/TLS 模式不匹配

Cloudflare SSL 模式源服务器配置结果
Full (Strict)HTTP only522
Full (Strict)自签证书522
FullHTTP only522
FlexibleHTTP only正常
FlexibleHTTPS正常

4. 端口未监听

  • Gunicorn 未绑定到预期端口
  • Nginx 反向代理配置错误,upstream 指向了错误的端口

5. 源接口响应过慢

  • 数据库聚合查询耗时过长(如 dashboard 统计接口)
  • 后端进程被阻塞(锁等待、长事务等)
  • Gunicorn worker 全部被占用,新请求排队超时

三、排查步骤

第一步:检查防火墙规则

bash
# iptables 查看规则
sudo iptables -L -n

# ufw 查看规则
sudo ufw status

# 确认 Cloudflare IP 段是否放行(Cloudflare IP 段见附录)

第二步:检查 Cloudflare SSL/TLS 设置

  1. 登录 Cloudflare Dashboard
  2. 选择域名 → SSL/TLS → Overview
  3. 确认加密模式设置正确:
┌─────────────────────────────────────────────────────────────┐
│  源服务器只有 HTTP 端口                                      │
│  → 设为 "Flexible"(存在中间人风险,不推荐生产环境)          │
│                                                             │
│  源服务器有自签证书                                          │
│  → 设为 "Full"                                              │
│                                                             │
│  源服务器有受信任的 SSL 证书(Let's Encrypt 等)              │
│  → 设为 "Full (Strict)"(最安全,推荐)                      │
└─────────────────────────────────────────────────────────────┘

四、预防措施

1. 监控告警

  • 配置 Docker 容器状态监控(如 Prometheus + cAdvisor)
  • 设置 Cloudflare 5xx 错误率告警
  • 配置服务器资源告警(CPU > 80%、内存 > 85%、磁盘 > 90%)

五、快速应急处理

当 522 错误发生时,按以下顺序快速恢复:

1. docker ps → 确认容器是否运行
2. docker restart ailike-backend → 尝试重启
3. docker logs ailike-backend --tail 50 → 查看错误日志
4. 如果重启后仍 522 → 检查端口监听和防火墙
5. 如果接口特别慢 → 临时增加 Gunicorn timeout

附录

Cloudflare IP 段(需要放行的回源IP)

Cloudflare 回源 IP 段会动态更新,建议通过 API 获取最新列表:

bash
curl https://www.cloudflare.com/ips-v4
curl https://www.cloudflare.com/ips-v6

主要 IPv4 段(仅供参考,以官网为准):

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22

相关错误码对照

Cloudflare 错误含义排查方向
520源服务器返回了未知错误查看源服务器错误日志
521源服务器拒绝连接源服务器进程未运行或端口未监听
522连接超时TCP 握手失败,检查防火墙和进程状态
523源服务器无法到达DNS 解析问题或路由不通
524连接成功但响应超时源服务器处理太慢,优化接口性能

参考资料

Released under the 如意开源许可协议.