跳到主要内容

解决 Cloudflare 521 错误

· 阅读需 3 分钟
xyspg

在使用 Cloudflare 代理服务器时,有时会遇到 521 Web Server is Down 错误。本文将介绍如何解决这个问题。

错误原因

查看 CF 官方文档 可以得知 521 错误的两个最常见原因:

  • 源站 Web 服务器应用程序离线
  • Cloudflare 请求被阻止

如果服务器正常运行,且防火墙没有设置特殊规则,最常见的原因是因为在服务器上没有安装 Origin CA 证书

解决方案

创建 Origin CA 证书

  1. 登录 Cloudflare 仪表板
  2. 选择你的域名
  3. 转到 SSL/TLS > 源服务器
  4. 单击“创建证书”
  5. 选择通过 Cloudflare 生成私钥和 CSR
  6. 输入域名(如 *.你的网站.com,你的网站.com)。域名根和第一级通配符主机名已默认包含
  7. 选择到期日期。
  8. 单击“下一步”
  9. 选择密钥格式:
  • 使用 OpenSSL 的服务器(如 Apache 和 NGINX)通常希望使用 PEM 文件(Base64 编码的 ASCII),但也可以使用二进制 DER 文件
  • 使用 Windows 和 Apache Tomcat 的服务器需要 PKCS#7(.p7b 文件)
  1. 将签名的 Origin 证书和私钥分别复制到不同的文件中。
警告

退出页面后将无法再次查看私钥,所以务必保存到本地,否则只能重新创建

  1. 单击“确定”。

在服务器上安装 Origin CA 证书(以 Nginx 为例)

将 Origin CA 证书(在步骤 1 中创建)上传到源站 Web 服务器上。(使用 SFTP 等)
接下来的操作因服务器而异,以下以 Nginx 为例

  1. 打开 Nginx 配置文件(通常位于 /etc/nginx/
  2. 在 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;
}
}
  1. 重启 Nginx
sudo /etc/init.d/nginx restart

其它服务器配置参考

参见