解决 Error 521:检查服务器防护与超时设置

如果你的网站接入了 Cloudflare,然后时不时跳出 “Error 521 – Web Server Is Down”,那说明 Cloudflare 连不上你的源站服务器。这个报错看起来像是服务器宕机,其实更多时候是配置问题。

这篇文章就来讲讲,Error 521 为什么会反复出现,以及哪些防护设置、超时设置可能是幕后“元凶”。

什么是 Error 521?

Error 521 是 Cloudflare 返回的状态码,意思是“我正常,但你的服务器没响应”。它的成因有几个可能:

Cloudflare 能正常工作
源站服务器没有回应请求
防火墙把 Cloudflare 拦住了
服务器资源耗尽或处理超时

所以关键不是 Cloudflare 出问题,而是源站让它“吃了闭门羹”。

常见导致 521 报错的防护设置问题

防火墙拦截了 Cloudflare 的请求

很多服务器都会装防火墙,比如 iptables、CSF、UFW 等,这些工具如果没有添加 Cloudflare 的 IP 白名单,就会把它当成“可疑请求”。

解决方法是:前往 Cloudflare 官方页面,获取完整的 IP 列表,然后添加到服务器防火墙白名单中。登录你的服务器终端(SSH)

输入以下命令添加 Cloudflare IP 白名单(部分示例):

sudo ufw allow from 173.245.48.0/20
sudo ufw allow from 103.21.244.0/22
sudo ufw allow from 103.22.200.0/22
sudo ufw allow from 103.31.4.0/22重复上面命令,直到全部 Cloudflare IP 段都添加完。

最后执行:sudo ufw reload完成后,再通过 Cloudflare 访问你的网站,看是否还出现 Error 521。

所有 IP 段可从 Cloudflare 官方获取。

例如在 Ubuntu 上使用 UFW:

sudo ufw allow from 173.245.48.0/20
sudo ufw allow from 103.21.244.0/22

你需要添加所有 Cloudflare 的网段才能确保访问正常。

Web 应用防火墙(WAF)误判

如果服务器启用了 Imunify360、ModSecurity、BitNinja 等防护系统,它们可能因为请求频率、Header 格式或 IP 行为,误判 Cloudflare 的请求为攻击并封锁。

建议查看拦截日志,将 Cloudflare 的 IP 和 UA 加入白名单,必要时降低防护敏感度。

检查 PHP、Nginx 和 Apache 的超时设置

服务器响应超时也会导致 Cloudflare 报 521。你可以通过以下方式调整设置:

PHP 设置(推荐 max_execution_time 不小于 300)

打开 php.ini 文件(路径因服务器不同而异):sudo nano /etc/php/8.1/fpm/php.ini
查找以下参数,并进行调整:max_execution_time = 300
memory_limit = 512M
保存并退出(Ctrl+O,回车,Ctrl+X)

重启 PHP:sudo systemctl restart php8.1-fpm

Nginx 设置超时

编辑 nginx 配置文件:sudo nano /etc/nginx/nginx.conf
在 http 区块中添加:proxy_read_timeout 300;
fastcgi_read_timeout 300;
保存后执行:sudo nginx -t # 检查配置是否正确
sudo systemctl reload nginx

Apache 设置超时(如使用的是 Apache)

编辑配置文件:sudo nano /etc/apache2/apache2.conf
添加或修改:Timeout 300
ProxyTimeout 300
保存并重启:sudo systemctl restart apache2

MySQL 数据库优化建议

如果你的数据库处理慢、负载高,也会拖慢整个网站响应。

推荐操作:

安装 mysqltuner 工具:sudo apt install mysqltuner
sudo mysqltuner
根据提示优化:减少不必要的查询

添加缺失索引

增加缓存参数(如 query_cache_size)

查看慢查询日志:sudo nano /etc/mysql/my.cnf

确保启用了以下内容:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

重启数据库后,检查日志分析瓶颈。

以上每一项操作都是实际可以在服务器终端中完成的。如果你的服务器使用的是面板(如 cPanel、宝塔),也可以在图形界面中找到相应设置入口,手动调整。

源站抗压能力不足

轻量服务器或资源紧张的 VPS 在访问高峰时可能资源耗尽,导致服务挂起。这种情况下 Cloudflare 自然连不上源站。

建议使用缓存插件(如 WP Rocket、LiteSpeed Cache)、开启 Cloudflare 缓存、减轻后台插件负担,或直接升级主机配置。

Cloudflare 端优化建议

虽然报错是源站问题,但 Cloudflare 也能起到缓解作用:

开启“缓存所有内容”规则
为静态页面设置较长的 TTL
对不常变动的页面使用“边缘缓存”

这能有效减少 Cloudflare 对源站的请求压力,让服务器喘口气。

总结

Error 521 频繁出现,往往是源站配置不合理。从防火墙、WAF、超时设置和服务器负载几个方面排查,大多数问题都能解决。如果实在不想改动太多,也可以通过优化缓存和静态资源加速,让 Cloudflare 多处理一些内容,源站就不容易断线。这样你的网站运行就更稳定了。

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注