解决 Cloudflare 521 错误
在使用 Cloudflare 代理服务器时,有时会遇到 521 Web Server is Down 错误。本文将介绍如何解决这个问题。
错误原因
查看 CF 官方文档 可以得知 521 错误的两个最常见原因:
- 源站 Web 服务器应用程序离线
- Cloudflare 请求被阻止
如果服务器正常运行,且防火墙没有设置特殊规则,最常见的原因是因为在服务器上没有安装 Origin CA 证书。
解决方案
创建 Origin CA 证书
- 登录 Cloudflare 仪表板。
- 选择你的域名
- 转到 SSL/TLS > 源服务器
- 单击“创建证书”
- 选择通过 Cloudflare 生成私钥和 CSR
- 输入域名(如 *.你的网站.com,你的网站.com)。域名根和第一级通配符主机名已默认包含
- 选择到期日期。
- 单击“下一步”
- 选择密钥格式:
- 使用 OpenSSL 的服务器(如 Apache 和 NGINX)通常希望使用 PEM 文件(Base64 编码的 ASCII),但也可以使用二进制 DER 文件
- 使用 Windows 和 Apache Tomcat 的服务器需要 PKCS#7(.p7b 文件)
- 将签名的 Origin 证书和私钥分别复制到不同的文件中。
:::caution 退出页面后将无法再次查看私钥,所以务必保存到本地,否则只能重新创建 :::
- 单击“确定”。
在服务器上安装 Origin CA 证书(以 Nginx 为例)
将 Origin CA 证书(在步骤 1 中创建)上传到源站 Web 服务器上。(使用 SFTP 等)
接下来的操作因服务器而异,以下以 Nginx 为例
- 打开 Nginx 配置文件(通常位于
/etc/nginx/
) - 在 Server 块中添加如下(将路径替换为你自己的)
listen 443;
ssl on;
ssl_certificate /etc/ssl/your_domain_name.pem;
ssl_certificate_key /etc/ssl/your_domain_name.key;
例如:
server {
listen 443
ssl on;
ssl_certificate /etc/ssl/your_domain_name.pem; (or bundle.crt)
ssl_certificate_key /etc/ssl/your_domain_name.key;
server_name your.domain.com;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
root /home/www/public_html/your.domain.com/public/;
index index.html;
}
}
3. 重启 Nginx
sudo /etc/init.d/nginx restart
其它服务器配置参考