赢取 1TB 住宅流量、 iPhone 18 Pro Max 及另外 + 33 份奖品充值 $50 即可获 = 1 张抽奖券立即参与
企业

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

Tania De Mel

2026年11月06日

总计

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

用 AI 总结这篇文章:

你打开一个网站,看到一个灰色的 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 本身。区域性封锁是例外,下文会讲到

如果你是站长:

  1. Web 服务器在运行吗?→ 步骤 1

  2. 绕过 Cloudflare 后网站能加载吗?如果能 → 步骤 3–5。如果不能 → 步骤 1、2 和 6

  3. 错误每隔几天就反复出现吗?→ “521 错误为何反复出现”

  4. 只在部分国家出现吗?→ “521 错误只在部分国家出现?”

错误代码 521 是什么意思

what-is-error-code-521-.webp

错误代码 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 文档,主要有两个原因:

  1. Web 服务器应用已离线,例如 Nginx 或 Apache 崩溃或已停止

  2. Cloudflare 的请求在源站被拦截,通常是被防火墙、安全插件或限速器拦截

下面的每种修复方法都针对这两个原因之一。

如何修复 Cloudflare 错误代码 521(7 个步骤)

7-steps-how-to-fix-error-code-521.webp

请按顺序逐步排查。大多数 521 错误在第 3 步就能解决。

步骤 1:检查 Web 服务器是否在运行

连接到服务器,检查 Web 服务器的状态:

bash
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 地址:

bash
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 为例:

bash
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 配置:

bash
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/20

2. 把 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 数据中心处理了你的请求。要了解不同国家的访客会得到什么结果,可以通过位于这些国家的住宅代理来运行检查:

python
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 没有用,而且每次重试都会消耗流量。

正确的做法是:

  1. 退避重试,每次重试之间等待更长时间,尝试三四次后停止

  2. 从另一个地区测试一次。如果只有一个地区失败,就是目标站点一侧的区域性封锁

  3. 把该 URL 移入重试队列,让其余任务继续运行

  4. 将 521 错误与 403 或 Cloudflare 的 1020 等封锁分开统计,这样成功率数据才真实可信

对于大型任务, backconnect 旋转代理负责应对真正的封锁并轮换 IP,而你的代码则用退避机制处理 521 错误。我们的 网页抓取应用场景介绍了团队是如何搭建这套方案的。

如何预防 521 错误

how-to-prevent-error-code-521.webp
  • 从多个地点监控可用性,这样你能比访客更早得知 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 起。


有用吗?

分享文章

关于错误代码 521 的常见问题