Cloudflare 522 错误核心原因是 Cloudflare 无法与源站建立 TCP 连接,最常见的原因是源站防火墙或云厂商安全组拦截了 Cloudflare 的回源 IP。排查时请优先确认源站服务存活,并在防火墙中放行 Cloudflare IP 段。
核心结论:522 错误通常意味着 Cloudflare 无法与源站建立 TCP 连接,防火墙拦截是常见原因之一,需优先放行 Cloudflare 回源 IP。
- 确认状态:源站服务器是否存活,端口是否监听。
- 执行操作:在源站防火墙及安全组中放行 Cloudflare IP 段。
- 验证结果:通过 curl 测试直连与代理连接,观察错误是否消失。
故障原理简述
Cloudflare 作为反向代理,请求流程是“用户 -> Cloudflare -> 源站”。522 错误表示 Cloudflare 向源站发起握手时,在规定时间内(通常 15 秒)没有收到响应。
防火墙设置不当会导致 Cloudflare 的请求包被源站直接丢弃,TCP 握手无法完成。这不同于 525(SSL 握手失败)或 521(Web 服务器拒绝连接),522 更偏向网络层面的不通。
实操步骤与配置命令
1. 检查源站服务状态
先排除源站自身宕机。在服务器内部执行:
systemctl status nginx # 或 apache/httpd netstat -tulpn | grep :80
确认服务正在运行且监听 80/443 端口。
2. 获取 Cloudflare IP 段
不要手动复制列表,建议使用命令动态获取,同时关注 IPv4 和 IPv6:
curl -s https://www.cloudflare.com/ips-v4 curl -s https://www.cloudflare.com/ips-v6
若需自动化更新,可将上述命令写入定时任务脚本。
3. 配置服务器防火墙(关键)
操作防火墙前请确保有控制台访问权限,务必先保留 SSH 端口规则以防锁死服务器。以下为主流防火墙放行示例(请替换为实际获取的 IP 段):
iptables 示例:
iptables -I INPUT -p tcp -m iprange `--src-range` 192.0.2.0-192.0.2.255 `--dport` 80 -j ACCEPT iptables -I INPUT -p tcp -m iprange `--src-range` 192.0.2.0-192.0.2.255 `--dport` 443 -j ACCEPT
ufw 示例:
ufw allow from 192.0.2.0/24 to any port 80,443
firewalld 示例:
firewall-cmd `--permanent` `--add-rich-rule`='rule family="ipv4" source address="192.0.2.0/24" port port="80" protocol="tcp" accept' firewall-cmd `--reload`
4. 检查云厂商安全组
实例级别的防火墙之外还有“安全组”(如 AWS、阿里云、腾讯云)。需在云控制台放行 80/443 入站规则。
注意:若将安全组来源设为 0.0.0.0/0,必须确保 Cloudflare 代理模式(橙色云)已开启,否则源站 IP 将直接暴露。若未开启代理,建议仅放行 Cloudflare IP 段。
验证方法
配置完成后,按以下顺序验证:
1. 检查规则生效:查看防火墙规则是否已添加。
iptables -L INPUT -n `--line-numbers` ufw status verbose
2. 测试外部连通性:使用源站 IP 直接请求(需 bypass Cloudflare 或在本机 hosts 绑定源站 IP 测试):
curl -I http://你的源站 IP
3. 观察业务状态:访问网站,观察 Cloudflare 错误页面是否消失。在 Cloudflare 后台查看“分析”->“事件”,确认 522 错误计数不再增长。
4. 查看源站日志:确认是否有来自 Cloudflare IP 段的请求记录。
tail -f /var/log/nginx/access.log
常见风险与坑
1. SSH 锁死风险:修改防火墙规则前,务必确认 SSH 端口(默认 22)处于放行状态,建议先执行 iptables -I INPUT -p tcp `--dport` 22 -j ACCEPT。
2. IPv6 遗漏:若源站开启 IPv6,需同时放行 Cloudflare 的 IPv6 段(ips-v6),否则部分用户仍会超时。配置命令需指定 family="ipv6" 或使用 ip6tables。
3. IP 段变更:Cloudflare 会不定期增加 IP 段,硬编码 IP 列表可能导致未来失效,建议订阅官方更新或使用自动化脚本。
4. Hosting 商防火墙:部分虚拟主机或托管商有独立防火墙层,需联系服务商确认是否拦截了 CF 请求。
5. DDoS 保护模式:开启“under attack”模式时,Cloudflare 可能使用不同的 IP 段,需确保全部放行。
参考来源
- Cloudflare Support, Troubleshooting Cloudflare 5XX Errors, https://developers.cloudflare.com/support/troubleshooting/cloudflare-errors/troubleshooting-cloudflare-5xx-errors/
- Cloudflare, Cloudflare IP Ranges, https://www.cloudflare.com/ips/