error 521表示cloudflare已连通源站服务器但web服务主动拒绝http请求,主因是防火墙拦截cloudflare ip、ssl配置不兼容、web服务未正确监听端口、虚拟主机配置冲突或后端应用异常中断。

如果您在访问使用Cloudflare代理的网站时看到Error 521,这明确表示Cloudflare边缘节点已成功与您的源站服务器建立TCP连接,但源站Web服务(如Nginx或Apache)在握手完成后主动拒绝了HTTP请求或立即关闭了连接。以下是针对该现象的多种验证与修复路径:
一、确认源站服务进程是否存活
521错误的前提是源站服务器在线且网络可达,但Web服务进程未响应HTTP请求。需验证实际监听状态而非仅检查服务状态。
1、通过SSH登录宝塔服务器,执行systemctl is-active nginx或systemctl is-active apache2确认服务处于active状态。
2、运行ss -tlnp | grep ':80\|:443'检查Nginx/Apache是否确实在80/443端口监听,且无其他进程(如Python SimpleHTTPServer)意外占用端口。
3、执行curl -I http://127.0.0.1从本地发起请求,若返回Connection refused或超时,则说明Web服务虽运行但未正确绑定端口或配置了localhost-only监听。
二、检查防火墙是否拦截Cloudflare IP段
宝塔面板内置防火墙、Nginx Lua WAF插件或系统iptables常将Cloudflare全球IP段误判为扫描行为并主动RST连接,这是521最常见成因。
1、登录宝塔面板,在【安全】页面中点击【放行端口】,确认80、443端口已开放,且无针对特定IP段的【屏蔽IP】规则。
2、进入【软件管理】→【Nginx】→【防火墙】,检查是否启用“防CC攻击”或“IP黑名单”,临时关闭该功能并测试。
3、手动添加Cloudflare官方IPv4和IPv6地址段至白名单:执行curl https://www.cloudflare.com/ips-v4获取全部IPv4列表,逐条执行ufw allow from [IP] to any port 80,443(Ubuntu)或iptables -I INPUT -s [IP] -p tcp --dport 80 -j ACCEPT(CentOS)。
三、验证SSL/TLS握手兼容性
当源站强制要求TLS 1.3或禁用SNI时,Cloudflare部分边缘节点可能因协议不匹配而触发连接重置,表现为521而非证书错误。
1、在宝塔面板【网站】→【SSL】中,取消勾选“强制HTTPS”,暂时使用HTTP回源测试是否仍报521。
2、进入【网站】→【设置】→【配置文件】,查找ssl_protocols指令,确保包含TLSv1.2 TLSv1.3;若存在ssl_ciphers,需移除过于严格的套件(如仅保留CHACHA20)。
3、在Cloudflare仪表盘【SSL/TLS】→【Origin Server】中,点击【Create Certificate】生成免费证书并下载,上传至宝塔对应网站的SSL设置中,启用“Full (strict)”模式前先用“Full”模式测试。
四、排查Nginx/Apache虚拟主机配置冲突
多个站点共用同一IP时,若默认server块未定义或返回空响应,Cloudflare在无法匹配Host头时会收到空包体连接关闭,触发521。
1、检查Nginx主配置中是否存在server { listen 80 default_server; ... }块,其内部必须包含有效return 200 "OK";或指向一个真实站点的root目录。
2、在宝塔【网站】列表中,确认目标域名站点状态为“已启动”,且【域名】字段中已准确填写含www与不含www的完整域名,无拼写错误或多余空格。
3、执行nginx -t验证配置语法,若提示conflicting server name,需删除重复server_name定义或合并配置块。
五、检测后端应用层异常中断
PHP-FPM崩溃、WordPress插件钩子阻塞响应、或自定义rewrite规则导致无限重定向,均会使Nginx在收到上游响应前主动断开连接,被Cloudflare识别为521。
1、查看Nginx错误日志:tail -f /www/wwwlogs/yoursite.error.log,搜索connect() failed、upstream prematurely closed等关键词。
2、临时停用所有WordPress安全插件(如Wordfence、iThemes Security),切换为默认主题Twenty Twenty-Four,排除PHP层干扰。
3、在宝塔【PHP管理】中,将当前PHP版本的max_execution_time调高至300,memory_limit设为512M,避免脚本超时引发连接中断。










