Ubuntu虚拟主机通过Cloudflare访问出现521错误求助
看起来你已经顺利搞定了两个站点的迁移,结果卡在这个站点上确实挺闹心的😅。先给你梳理下Cloudflare 521错误的核心原因:Cloudflare无法成功建立到你源服务器(新服务器)的TCP连接——既然用服务器IP直接访问正常,说明你的Apache服务本身是没问题的,问题大概率出在Cloudflare和服务器之间的连接链路或者配置上。
给你几个针对性的排查方向,按优先级来:
先确认Cloudflare DNS记录的准确性
登录Cloudflare面板,检查这个域名的A/AAAA记录是不是确实指向了新服务器的公网IP?有没有不小心填成旧服务器的IP?另外注意记录的代理状态是橙色云朵(代理模式),如果是灰色的DNS-only模式,那不会触发521错误,但也失去了Cloudflare的代理功能,确认下是不是你想要的模式。重点排查服务器防火墙设置(最常见的坑)
你用IP访问时是直接连服务器,但Cloudflare的请求是从它的官方IP段发起的。如果你的Ubuntu防火墙(比如ufw)只开放了你自己IP的访问权限,或者没允许Cloudflare的IP段,就会导致Cloudflare连不上。
可以先临时关闭ufw测试:sudo ufw disable如果关闭后能正常访问了,那就是防火墙的问题。接下来需要把Cloudflare的所有IPv4和IPv6地址段添加到ufw的允许规则里(你可以找到Cloudflare官方公布的IP列表,批量添加),比如先加一个IPv4段测试:
sudo ufw allow from 103.21.244.0/22 to any port 80 sudo ufw allow from 103.21.244.0/22 to any port 443测试有效后再把所有Cloudflare的IP段都加上,最后重新启用ufw:
sudo ufw enable。检查Apache的监听配置
看看你的Apache是不是只监听了本地回环地址或者旧服务器的IP?打开/etc/apache2/ports.conf,确认里面的Listen指令是:Listen 0.0.0.0:80 Listen [::]:80这样Apache才会监听服务器所有网卡的请求,Cloudflare的连接才能进来。如果之前是指定了某个IP监听,改成上面的配置后重启Apache:
sudo systemctl restart apache2。验证虚拟主机配置的有效性
虽然你已经执行了a2ensite,但还是可以用Apache的配置检查工具确认有没有语法错误:sudo apache2ctl configtest如果输出
Syntax OK就没问题;如果有错误,根据提示修正后重启Apache。另外,也可以确认下虚拟主机文件是不是真的被加载了,看看sites-enabled目录里的软链接是不是正确指向sites-available里的对应文件。检查服务器端口占用情况
确认80端口确实是Apache在监听,没有被其他服务抢占:sudo netstat -tulpn | grep :80输出里应该能看到
apache2的进程,否则就是端口被占用了,需要停止占用端口的服务或者修改Apache监听端口。临时调整Cloudflare的SSL模式测试
如果后续要配置HTTPS,现在可以先把Cloudflare的SSL/TLS模式改成“灵活”或者“关闭”,排除SSL配置不匹配导致的连接问题(不过521主要是TCP连接失败,这个优先级稍低,但可以试试)。
备注:内容来源于stack exchange,提问作者Nik Lever




