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 only | 522 |
| Full (Strict) | 自签证书 | 522 |
| Full | HTTP only | 522 |
| Flexible | HTTP only | 正常 |
| Flexible | HTTPS | 正常 |
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 设置
- 登录 Cloudflare Dashboard
- 选择域名 → SSL/TLS → Overview
- 确认加密模式设置正确:
┌─────────────────────────────────────────────────────────────┐
│ 源服务器只有 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 | 连接成功但响应超时 | 源服务器处理太慢,优化接口性能 |
