Cloudflare 页面上出现 521 或 522 时,很多人第一反应是:Cloudflare 挂了?
大多数时候不是。
这两个错误都发生在 Cloudflare 回源到你的 VPS 这一步,但含义不一样:
- 521 Web Server Is Down:Cloudflare 连到了源站 IP,但源站拒绝连接或 Web 服务没起来。
- 522 Connection Timed Out:Cloudflare 尝试连接源站,但连接超时,通常是网络、防火墙、负载或回源链路问题。
简单说:521 更像“门关着”;522 更像“敲门没人回应”。
不要把所有 Cloudflare 5xx 都当成一类。
| 错误 | 常见含义 | 优先检查 |
|---|---|---|
| 521 | 源站拒绝连接 / Web 服务没监听 | Nginx/Apache/Caddy、80/443 监听、防火墙拒绝 |
| 522 | Cloudflare 到源站连接超时 | 安全组、UFW、源站负载、路由、超时 |
| 523 | Cloudflare 找不到源站路由 | 源站 IP、DNS、路由问题 |
| 525 | SSL 握手失败 | Cloudflare SSL 模式、证书、TLS 配置 |
| 526 | 源站证书无效 | Full strict 下证书不可信或过期 |
这篇只讲最常见的 521 和 522。证书续期失败可以看:VPS 上 Let’s Encrypt 证书续期失败怎么办。
先确认你的 VPS 源站本身能不能访问。
如果你知道源站 IP:
curl -I http://源站IP
curl -I https://源站IP
如果站点依赖 Host 头,用:
curl -I http://源站IP -H 'Host: example.com'
curl -I https://源站IP -H 'Host: example.com' -k
如果直连都失败,说明问题在源站,不在 Cloudflare。
常见结果:
Connection refused:服务没监听或被拒绝,更像 521。Connection timed out:防火墙、安全组、路由或源站卡死,更像 522。SSL certificate problem:证书或 Cloudflare SSL 模式要查。- 能访问但 Cloudflare 不行:重点查 Cloudflare 回源 IP 是否被拦。
在 VPS 上执行:
sudo ss -lntp | egrep ':80 |:443 '
你应该看到 Nginx、Apache、Caddy 或应用在监听。
如果没有监听:
sudo systemctl status nginx --no-pager
sudo systemctl status apache2 --no-pager
sudo systemctl status caddy --no-pager
看日志:
sudo journalctl -u nginx -n 100 --no-pager
sudo journalctl -u apache2 -n 100 --no-pager
sudo journalctl -u caddy -n 100 --no-pager
如果 Nginx reload 失败、配置语法错、证书路径错,Cloudflare 看到的就可能是 521。Nginx 配置排查可以看:VPS Nginx 配置错误怎么办。
本机防火墙:
sudo ufw status verbose
sudo iptables -S
sudo nft list ruleset
如果用 firewalld:
sudo firewall-cmd --list-all
至少要允许 80 和 443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
但只放行系统防火墙不够。还要检查云厂商安全组 / 防火墙:
- 80/tcp 是否允许入站;
- 443/tcp 是否允许入站;
- 是否只允许了你自己的 IP,却没允许 Cloudflare 回源 IP;
- 是否有地区、线路、DDoS 策略拦截。
Cloudflare 回源不是从你的本地电脑访问源站,而是从 Cloudflare 的边缘节点访问你的 VPS。你本地能访问,不代表 Cloudflare 能访问。
很多人装了 Fail2Ban、WAF、Nginx deny 规则或云防火墙后,把 Cloudflare 回源 IP 当成异常访问拦了。
先看 Nginx access/error log:
sudo tail -n 100 /var/log/nginx/access.log
sudo tail -n 100 /var/log/nginx/error.log
如果完全看不到 Cloudflare 的请求,可能在系统防火墙或安全组前就被挡住了。
如果能看到请求但返回 403/444/499/5xx,就要查 Nginx、应用或 WAF 规则。
Fail2Ban 场景下,可以检查:
sudo fail2ban-client status
sudo fail2ban-client status sshd
如果你按 IP 白名单限制访问源站,记得使用 Cloudflare 官方公布的 IP 段,并保持更新。不要手写几条旧 IP 段就长期不管。
522 不一定是端口没开。它更常见于 Cloudflare 到源站建立连接超时。
在 VPS 上看负载:
uptime
free -h
df -h
top
看磁盘 I/O:
iostat -x 1
看 Nginx / 应用日志:
sudo journalctl -u nginx -n 100 --no-pager
sudo tail -n 100 /var/log/nginx/error.log
如果源站 CPU、内存、磁盘 I/O 都很高,Cloudflare 连接可能超时。磁盘 I/O 高可以看:VPS 磁盘 I/O 很高怎么办。
常见原因:
- PHP-FPM / Gunicorn / Node 上游卡死;
- 数据库慢查询拖住请求;
- 内存不足触发 swap 或 OOM;
- 磁盘 I/O 等待过高;
- 后端连接池耗尽;
- 被爬虫或攻击流量打满。
虽然 521/522 不完全等于 SSL 错误,但 SSL 模式配置错会让排查变复杂。
常见模式:
- Flexible:浏览器到 Cloudflare 是 HTTPS,Cloudflare 到源站是 HTTP;
- Full:Cloudflare 到源站也是 HTTPS,但不严格校验证书;
- Full strict:Cloudflare 到源站 HTTPS,且要求源站证书有效。
推荐生产站点用 Full strict,源站安装 Let’s Encrypt 或 Cloudflare Origin Certificate。
如果你源站只监听 80,却 Cloudflare 用 HTTPS 回源,就会出问题。检查:
sudo ss -lntp | egrep ':80 |:443 '
curl -I https://源站IP -H 'Host: example.com' -k
如果证书过期或域名不匹配,通常更像 525/526,但很多用户会在 521/522 排查时一起踩到。
Cloudflare DNS 里 A/AAAA 记录必须指向真实源站。
检查:
dig +short example.com
如果开启了橙云代理,外部 dig 看到的是 Cloudflare IP,不是源站 IP。你要在 Cloudflare 控制台检查 DNS 记录里的源站 IP 是否正确。
常见问题:
- VPS 换 IP 后 Cloudflare DNS 没更新;
- A 记录更新了,AAAA 记录还指向旧 IPv6;
- 源站关闭 IPv6,但 Cloudflare 仍回源到 AAAA;
- 多个 DNS 记录指向不同机器。
IPv6 配置问题可以看:IPv6 VPS 配置指南。
如果你急着判断是不是 Cloudflare 链路问题,可以临时把 DNS 记录从橙云改成灰云,让访问直接到源站。
但注意:
- 灰云会暴露源站 IP;
- 如果源站没有 HTTPS 配好,用户可能看到证书错误;
- 这只是排查手段,不是长期方案;
- 改 DNS 可能有缓存延迟。
更稳的做法是用 curl -H 'Host: 域名' 源站IP 直接测试源站,不必马上改线上 DNS。
如果你要开工单,不要只说“Cloudflare 522”。建议提供:
date
curl -I http://源站IP -H 'Host: example.com'
curl -I https://源站IP -H 'Host: example.com' -k
sudo ss -lntp | egrep ':80 |:443 '
sudo ufw status verbose
sudo journalctl -u nginx -n 100 --no-pager
sudo tail -n 100 /var/log/nginx/error.log
uptime
free -h
df -h
如果怀疑 Cloudflare 回源 IP 被拦,附上防火墙和安全组截图。这样比只发错误页面截图更容易定位。
遇到 Cloudflare 521 / 522,按这个顺序查:
- 确认错误码:521 是拒绝连接,522 是连接超时。
- 用
curl -H 'Host: 域名' 源站IP直连源站。 - 在 VPS 上用
ss -lntp确认 80/443 是否监听。 - 检查 Nginx/Apache/Caddy 服务状态和日志。
- 检查 UFW、iptables/nftables、firewalld。
- 检查云厂商安全组是否允许 Cloudflare 回源。
- 检查是否误拦 Cloudflare IP。
- 522 场景下检查 CPU、内存、磁盘 I/O 和上游服务。
- 检查 Cloudflare DNS 记录和 A/AAAA 是否指向正确源站。
- 检查 SSL 模式是否和源站监听/证书匹配。
Cloudflare 521 / 522 的核心不是“Cloudflare 坏了”,而是 Cloudflare 到你的 VPS 源站这条路出了问题。
521 优先查 Web 服务是否启动、80/443 是否监听、防火墙是否拒绝;522 优先查防火墙/安全组、源站负载、网络和超时。先用 curl 绕过 Cloudflare 直连源站,再看 ss、journalctl、Nginx 日志和安全组规则,基本就能把问题范围缩小到源站、网络还是 Cloudflare 配置。
