错误代码 521:“Web 服务器已关闭”是什么意思,以及如何修复

你打开一个网站,看到一个灰色的 Cloudflare 页面:“Web server is down. Error code 521.”(Web 服务器已关闭,错误代码 521)。浏览器显示“Working”,Cloudflare 显示“Working”,而主机显示“Error”。如果这是你的网站,每多持续一分钟,就会损失访客、销量和信任。
好消息是:521 错误几乎总是由少数几个原因造成的,只要确认是哪一个,大多数几分钟就能修好。本指南将告诉你如何快速找到确切原因,用可直接复制粘贴的命令修复,并防止它再次出现,其中包括大多数指南都没有提到的两个原因。
快速解答
错误代码 521 表示Cloudflare 尝试连接网站的源服务器,但服务器拒绝了连接。最常见的原因有三个:Web 服务器已停止运行、防火墙拦截了 Cloudflare 的 IP 地址,或者 SSL 设置让 Cloudflare 连接到了一个没有任何服务监听的端口。如果你是访客,问题出在网站一侧,与你无关。如果你是站长,请先检查 Web 服务器是否在运行,以及是否已放行 Cloudflare 的 IP 段。
你的网站只在部分国家出错? 用 CyberYozh 旋转住宅代理 以真实访客的视角测试,覆盖 195+ 个国家,价格从 $2/GB 起。具体做法见下文。
你是访客还是站长:从这里开始
如果你是访问者:
521 错误与你的设备、浏览器或网络连接无关
等几分钟再刷新。许多 521 错误会在服务器重启后消失
如果持续时间更长,就需要站长来修复。有条件的话请告知对方
VPN 或代理通常没有帮助,因为服务器拒绝的是 Cloudflare 本身。区域性封锁是例外,下文会讲到
如果你是站长:
Web 服务器在运行吗?→ 步骤 1
绕过 Cloudflare 后网站能加载吗?如果能 → 步骤 3–5。如果不能 → 步骤 1、2 和 6
错误每隔几天就反复出现吗?→ “521 错误为何反复出现”
只在部分国家出现吗?→ “521 错误只在部分国家出现?”
错误代码 521 是什么意思

错误代码 521 是 Cloudflare 在表达:“我连上了你的服务器,但它拒绝与我通信。”它不是官方的 HTTP 状态码,而是 Cloudflare 自定义的 5xx 代码之一,因此你也会看到它被写作 HTTP error 521 或 status code 521。
在 Cloudflare 的错误页面上,示意图清楚地标出了故障位置:浏览器和 Cloudflare 都正常,第三个标有“Host”的方框显示Error。这个“Cloudflare 主机错误”意味着问题出在源服务器上,也就是实际运行网站的那台机器。
它与相邻错误的区别:
520:服务器有响应,但响应为空或无效。参见我们的 错误代码 520 指南
521:服务器拒绝了连接
522:服务器未在规定时间内响应
Cloudflare 中的错误代码 521 是什么
有人访问使用 Cloudflare 的网站时,请求会先到达 Cloudflare 数据中心。然后 Cloudflare 向你的源服务器发起连接以获取页面。当这个连接被主动拒绝时,Cloudflare 就会显示错误代码 521。
根据 Cloudflare 文档,主要有两个原因:
Web 服务器应用已离线,例如 Nginx 或 Apache 崩溃或已停止
Cloudflare 的请求在源站被拦截,通常是被防火墙、安全插件或限速器拦截
下面的每种修复方法都针对这两个原因之一。
如何修复 Cloudflare 错误代码 521(7 个步骤)

请按顺序逐步排查。大多数 521 错误在第 3 步就能解决。
步骤 1:检查 Web 服务器是否在运行
连接到服务器,检查 Web 服务器的状态:
sudo systemctl status nginx # or: apache2 / httpd
sudo systemctl restart nginx # restart it if it's stopped
If it keeps stopping, check why. A common cause is the server running out of memory:
bash
sudo journalctl -u nginx --since "1 hour ago"
sudo dmesg | grep -i "killed process"步骤 2:绕过 Cloudflare,直接测试服务器
这一步能告诉你服务器本身是否正常。请将 ORIGIN_IP 替换为服务器的真实 IP 地址:
curl -I --resolve example.com:443:ORIGIN_IP https://example.com
sudo ss -tlnp | grep -E ':80|:443'第一条命令直接从服务器加载你的网站。第二条命令显示 80 和 443 端口上是否有服务在监听。如果没有任何服务在监听,Cloudflare 就无处可连。
步骤 3:在防火墙中放行 Cloudflare 的 IP 地址
这是最常见的修复方法。Cloudflare 在 cloudflare.com/ips 公布了完整的 IP 段列表。请在 80 和 443 端口上放行全部 IP 段。以 ufw 为例:
for ip in $(curl -s https://www.cloudflare.com/ips-v4) $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ufw allow from "$ip" to any port 80,443 proto tcp
done还需要检查:
安全插件,如 Wordfence,以及 Imunify360 或 CSF 等服务器工具
主机控制面板中的 IP 拦截功能,例如 cPanel 中的
主机商的网络防火墙或 DDoS 防护,你可能无法直接控制
常见错误: 粘贴了“拒绝所有,仅允许 Cloudflare”的 .htaccess 规则。这可能把你自己的监控和管理工具也挡在外面。放行 Cloudflare 的 IP 段时不要封锁其他所有来源,除非你已经做好了规划。
步骤 4:让 SSL/TLS 模式与正确的端口匹配
Cloudflare 会根据你的 SSL/TLS 设置连接不同的端口:
Cloudflare SSL/TLS 模式 | Cloudflare 连接的端口 | 服务器需要满足的条件 |
Flexible | 80 | Web 服务器监听 80 端口 |
Full | 443 | Web 服务器监听 443 端口,可使用任意证书 |
Full (strict) | 443 | 443 端口配有有效证书,例如免费的 Cloudflare Origin Certificate |
如果你切换到 Full 后立刻出现 521 错误,说明服务器很可能没有监听 443 端口。
步骤 5:检查 DNS 记录,包括 IPv6
在 Cloudflare 的 DNS 设置中,确认 A 记录指向服务器当前的 IP 地址。然后查看是否存在 AAAA(IPv6)记录。如果存在,但服务器不接受 IPv6 连接,Cloudflare 可能会尝试 IPv6 并被拒绝,而你通过 IPv4 测试时网站却完全正常。要么删除 AAAA 记录,要么让 Web 服务器监听 IPv6。
步骤 6:检查 Docker 或反向代理配置
如果你的网站运行在 Docker 中,或位于 Nginx Proxy Manager 之类的工具后面,请确认容器端口已发布,例如 -p 80:80 -p 443:443。还要检查应用监听的是 0.0.0.0,而不只是 127.0.0.1。只监听 localhost 的应用会拒绝所有外部连接,包括 Cloudflare 的连接。
步骤 7:联系你的主机服务商
如果以上方法都无效,可能是主机商在网络层拦截了 Cloudflare。请把 Cloudflare 错误页面底部显示的 Ray ID 以及错误发生的时间发给他们,这样他们就能找到被拦截的具体请求。
521 错误为何反复出现
这是主机论坛上充斥的问题,而大多数指南从未给出答案。网站正常运行,然后出现一阵 521,之后又自行恢复。
常见原因是:在 Cloudflare 之后,每位访客都是从 Cloudflare 的 IP 地址访问你的服务器。fail2ban、CSF、mod_evasive 等安全工具,或服务器自带的限速器,会看到少数几个 IP 发来成千上万个请求,判定为攻击并临时封禁。这些“攻击者”其实就是 Cloudflare,于是在封禁到期前,网站都会返回 521 错误。
真正的解决办法分两部分:
1. 让服务器看到每位访客的真实 IP 地址。Cloudflare 会在 CF-Connecting-IP 头中传递它。
Nginx 配置:
nginx
# Repeat set_real_ip_from for every range listed at cloudflare.com/ips
set_real_ip_from 173.245.48.0/20;
real_ip_header CF-Connecting-IP;
For Apache, using mod_remoteip:
apache
RemoteIPHeader CF-Connecting-IP
# Repeat for every range listed at cloudflare.com/ips
RemoteIPTrustedProxy 173.245.48.0/202. 把 Cloudflare 的 IP 段加入安全工具的忽略列表,例如 fail2ban 中的 ignoreip 或 CSF 中的 csf.ignore。这样你的工具只会封禁真正的恶意访客,而不会封禁 Cloudflare 本身。
快速检查: 如果防火墙日志显示被封禁的 IP 以 173.245.、104.16. 或 172.64. 开头,那你就找到原因了。这些都是 Cloudflare 的 IP 段。
521 错误只在部分国家出现:从多个地点测试
有时网站对你来说完全正常,但其他地区的访客却看到 521 错误。每个 Cloudflare 数据中心都使用各自的 IP 段连接你的服务器。如果你的防火墙,或 CSF 等工具中的国家封锁规则,拦截了其中一部分 IP 段,那么只有经由这些数据中心的访客才会看到错误。
每个使用 Cloudflare 的网站都有一个内置的诊断页面 /cdn-cgi/trace。其中的 colo= 一行会显示是哪个 Cloudflare 数据中心处理了你的请求。要了解不同国家的访客会得到什么结果,可以通过位于这些国家的住宅代理来运行检查:
import requests
SITE = "https://example.com"
PROXIES = { # one proxy per country you want to test
"US": "http://USERNAME:PASSWORD@GATEWAY_HOST:PORT",
"DE": "http://USERNAME:PASSWORD@GATEWAY_HOST:PORT",
"SG": "http://USERNAME:PASSWORD@GATEWAY_HOST:PORT",
}
for country, proxy in PROXIES.items():
p = {"http": proxy, "https": proxy}
trace = requests.get(f"{SITE}/cdn-cgi/trace", proxies=p, timeout=15).text
colo = next((line[5:] for line in trace.splitlines() if line.startswith("colo=")), "?")
status = requests.get(SITE, proxies=p, timeout=15).status_code
print(f"{country}: Cloudflare data center {colo}, status {status}")如果某个国家返回 521,而其他国家返回 200,说明你找到了区域性封锁。请检查防火墙和国家规则中,是否有针对服务该地区的 Cloudflare IP 段的拦截。
从 195+ 个国家测试你的网站: 使用支持按国家定位的 CyberYozh 旋转住宅代理,价格从 $2/GB 起,未用完的流量可结转。想看看移动端访客的体验?试试 CyberYozh LTE/5G 移动代理。请先用免费的 CyberYozh IP 检测工具确认每个代理的所在位置。
采集时遇到 521 错误:不要浪费代理流量
如果你的爬虫或 SEO 工具遇到 521 错误,说明目标网站的服务器已宕机,或者在拒绝 Cloudflare。它并没有在封锁你。换一个新 IP 没有用,而且每次重试都会消耗流量。
正确的做法是:
退避重试,每次重试之间等待更长时间,尝试三四次后停止
从另一个地区测试一次。如果只有一个地区失败,就是目标站点一侧的区域性封锁
把该 URL 移入重试队列,让其余任务继续运行
将 521 错误与 403 或 Cloudflare 的 1020 等封锁分开统计,这样成功率数据才真实可信
对于大型任务, backconnect 旋转代理负责应对真正的封锁并轮换 IP,而你的代码则用退避机制处理 521 错误。我们的 网页抓取应用场景介绍了团队是如何搭建这套方案的。
如何预防 521 错误

从多个地点监控可用性,这样你能比访客更早得知 521 错误
在防火墙中及时更新 Cloudflare 的 IP 列表。Cloudflare 会不定期更新其 IP 段
让 Web 服务器在崩溃后自动重启,例如在其 systemd 服务中设置 Restart=always
还原访客的真实 IP,让安全工具不再封禁 Cloudflare
先在测试域名上验证 SSL 和 DNS 的变更,再修改线上站点
关注内存和 CPU,因为内存耗尽的服务器会停止接受连接
总结
错误代码 521 看起来令人担忧,但它是较容易修复的 Cloudflare 错误之一,因为原因总是在你自己的服务器上。检查 Web 服务器是否在运行,放行 Cloudflare 的 IP 段,让 SSL 模式与正确的端口匹配,并排查多余的 AAAA 记录。如果错误反复出现,就要阻止安全工具封禁 Cloudflare。如果只在部分国家出现,请先从这些国家进行测试,再做任何改动。
像全世界的访客一样查看你的网站: 在 CyberYozh 目录中浏览所有套餐,其中旋转住宅代理覆盖 195+ 个国家,价格从 $2/GB 起,LTE/5G 移动代理每天 $1.70 起。
