Published on

如何使用 Cloudflare SSL 证书和 Nginx 为网站配置 HTTPS

Authors
  • avatar
    Name
    Jack Qin
    Twitter

在这个案例中,我将以我的网站为例。

第一步:设置 Cloudflare

  1. 注册/登录 Cloudflare

  2. 添加您的网站

    • 登录后,点击"添加站点"按钮。
    • 输入您的域名(例如 fudongs.com),然后点击"添加站点"。
  3. 选择方案

    • 选择一个方案。您可以从免费方案开始,它提供基本的 SSL/TLS 和 CDN 功能。
    • 点击"继续"。
  4. 更新 DNS 设置

    • Cloudflare 将扫描您的 DNS 记录。检查并确认所有记录正确。
    • 点击"继续"。
    • Cloudflare 将为您提供名称服务器。您需要将域名的名称服务器更新为这些 Cloudflare 名称服务器。
    • 登录您的域名注册商(例如 GoDaddy、Namecheap),将名称服务器更新为 Cloudflare 提供的服务器。
    • 完成后,返回 Cloudflare 并点击"继续"。

第二步:在 Cloudflare 中启用 SSL/TLS

  1. 导航到 SSL/TLS

    • 在 Cloudflare 控制面板中,转到"SSL/TLS"部分。
  2. 选择 SSL/TLS 模式

    • 选择 SSL/TLS 模式。如果您的源服务器已有 SSL 证书,推荐选择"完全"或"完全(严格)"。
      • 灵活:加密浏览器和 Cloudflare 之间的流量。
      • 完全:加密浏览器和 Cloudflare 之间的流量,以及使用自签名证书加密 Cloudflare 和源服务器之间的流量。
      • 完全(严格):加密浏览器和 Cloudflare 之间的流量,以及使用有效 SSL 证书加密 Cloudflare 和源服务器之间的流量。

第三步:创建 Cloudflare 源证书

  1. 创建证书

    • 在 Cloudflare 控制面板中,导航到 SSL/TLS -> 源服务器。
    • 点击"创建证书"。
    • 选择"让 Cloudflare 生成私钥和 CSR"。
    • 选择您要保护的域名(例如 fudongs.com*.fudongs.com 用于通配符)。
    • 点击"下一步"。
  2. 保存证书和私钥

    • 复制 Cloudflare 提供的源证书和私钥,并保存到您的服务器上。

第四步:配置 Nginx 使用 Cloudflare 证书

  1. 保存证书和私钥

    • 将源证书保存到服务器上的文件,例如 /etc/ssl/certs/cloudflare_origin.pem
    • 将私钥保存到服务器上的文件,例如 /etc/ssl/private/cloudflare_origin.key
  2. 编辑 Nginx 配置

    • 打开您站点的 Nginx 配置文件。通常位于 /etc/nginx/sites-available/fudongs.com

      sudo nano /etc/nginx/sites-available/fudongs.com
      
    • 更新配置以包含 SSL 设置:

      server {
          listen 80;
          server_name fudongs.com www.fudongs.com;
          return 301 https://$host$request_uri;
      }
      
      server {
          listen 443 ssl;
          server_name fudongs.com www.fudongs.com;
      
          ssl_certificate /etc/ssl/certs/cloudflare_origin.pem;
          ssl_certificate_key /etc/ssl/private/cloudflare_origin.key;
      
          ssl_protocols TLSv1.2 TLSv1.3;
          ssl_prefer_server_ciphers on;
          ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
      
          root /var/www/fudongs.com/html;
          index index.html index.htm index.nginx-debian.html;
      
          location / {
              try_files $uri $uri/ =404;
          }
      }
      
  3. 测试并重载 Nginx

    • 测试配置是否有语法错误:
      sudo nginx -t
      
    • 重载 Nginx 以应用更改:
      sudo systemctl reload nginx
      

第五步:验证 HTTPS

  1. 在浏览器中检查

    • 在浏览器中打开您的网站,验证它是否通过 HTTPS 加载。
  2. 验证证书

    • 使用类似 SSL Labs 的工具验证您的 SSL 证书和配置。

附加安全措施(可选)

  1. HTTP 严格传输安全(HSTS)

    • 添加 HSTS 以强制使用 HTTPS:
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      
  2. 将所有流量重定向到 HTTPS

    • 确保所有 HTTP 流量都重定向到 HTTPS。这已在上面的配置中包含,使用 80 端口服务器块中的 return 301 https://$host$request_uri; 指令。

按照这些详细步骤操作,您应该能够成功使用 Cloudflare 的 SSL 证书和 Nginx 为网站配置 HTTPS。