当网站接入了 Cloudflare CDN 后,如果服务器响应不了,浏览器就会抛出 Error 521。这类错误多数不是 Cloudflare 自身的问题,而是源站服务器拒绝了来自 Cloudflare 的连接请求。这篇文章会帮你搞清楚错误背后的原因,以及修复方式。
常见原因分析
1. 源站防火墙屏蔽了 Cloudflare 的 IP 段
很多服务器默认只接受本地或特定区域的访问,如果你启用了防火墙、安全组、fail2ban 或 IP 限制设置,很可能误伤了 Cloudflare 的 IP。
2. Web 服务没在监听 80 或 443 端口
Cloudflare 发出的请求默认走 80(HTTP)或 443(HTTPS)端口。如果这两个端口服务没开启,Cloudflare 无法连接源站。
3. 后端服务宕机或 Nginx/Apache 配置异常
比如 Nginx 被重启后没正常加载配置,PHP-FPM 崩溃,Apache 没启用虚拟主机等等,也会让 Cloudflare 报 521。
解决方法一:放通 Cloudflare IP 段
前往 Cloudflare 官方页面获取最新 IP 列表
将以下 IP 范围加入服务器的防火墙白名单(例如 iptables、CSF、AWS 安全组、阿里云安全策略等):
IPv4 示例:
173.245.48.0/20
103.21.244.0/22
104.16.0.0/13
…
IPv6 示例:
2400:cb00::/32
2606:4700::/32
…
操作方式依托你所使用的系统环境。比如在 Ubuntu + iptables 的服务器上:
for ip in $(curl https://www.cloudflare.com/ips-v4); do sudo iptables -I INPUT -p tcp -s $ip -j ACCEPT; done
别忘了保存规则,防止重启失效。
解决方法二:确认服务器监听端口正常
用以下命令检查 80 或 443 端口是否开启:
sudo netstat -tlnp | grep ‘:80|:443’
确认 nginx 或 apache 是否启动中:
sudo systemctl status nginx
sudo systemctl status apache2
若服务未启动,检查日志修复后重启:
sudo systemctl restart nginx
解决方法三:排查 HTTPS 配置和证书问题
若网站启用了 HTTPS,建议在 Cloudflare 后台选择正确的加密模式(建议使用“Full”或“Full Strict”):
登录 Cloudflare 控制台
进入网站 → SSL/TLS → 选择“Full”或“Full Strict”
确保源站证书可用,且未过期
解决方法四:暂时绕过 Cloudflare 测试源站
修改本地 hosts 文件,将域名直接指向源站 IP,再访问测试:
123.123.123.123 example.com
确认源站能正常响应后,再重新通过 Cloudflare 访问,逐步对比定位问题。
最后总结
Error 521 是 Cloudflare 与源站之间通信失败的表现,本质是服务器对 Cloudflare IP 的拦截。只要排查出入口防火墙、端口监听状态、Web 服务是否正常、HTTPS 设置是否匹配,大多数问题都能解决。如果你使用了安全插件或云厂商防火墙服务,也建议同步放通 Cloudflare 的全部 IP 段,避免后续访问中断。