用 Cloudflare + Nginx 给服务器配置 HTTPS 全流程

> 适用场景:域名托管在 Cloudflare,服务器跑在腾讯云(或任意 VPS),需要通过域名 HTTPS 访问服务。

---

## 前置条件

- 已有一个域名(本文以 mochif.com 为例)

- 域名 DNS 已托管到 Cloudflare

- 服务器已有应用在某个端口运行(本文以 new-api 跑在 3000 端口为例)

- 服务器系统:Ubuntu

---

一、清理 DNS 记录

域名从其他注册商(如 Spaceship)转入 Cloudflare 时,会自动导入原有的 DNS 记录,通常是注册商默认的 parking 页面 IP,没有任何用处。

进入 Cloudflare 控制台 → DNS,把自动导入的 A 记录全部删掉。

然后手动添加一条:

| 类型 | 名称 | 内容 | 代理状态 |

|------|------|------|----------|

| A | @ | 你的服务器公网 IP | 已代理(橙云开启) |

如果需要子域名(如 api.mochif.com),再加一条 api 指向同一个 IP。

---

二、申请 Cloudflare 源服务器证书

Cloudflare 提供免费的源服务器证书,有效期最长 15 年,专门用于 Cloudflare 到源服务器之间的加密,省去了 Let's Encrypt 90 天续签的麻烦。

步骤:

1. Cloudflare 控制台 → 选择域名 → SSL/TLS → 源服务器

2. 点击「创建证书」

3. 默认选项不用改:

- 使用 Cloudflare 生成私钥和 CSR

- 私钥类型:RSA (2048)

- 主机名*.mochif.commochif.com(自动填写)

- 有效期:15 年

4. 点击创建,得到两段内容:**源证书** 和 私钥

> ⚠️ 私钥只显示一次,必须立即复制保存,关闭页面后无法找回。

---

三、服务器安装 Nginx 并保存证书

### 3.1 安装 Nginx

```bash

sudo apt update && sudo apt install nginx -y

```

验证安装:

```bash

nginx -v

```

### 3.2 保存证书文件

创建证书目录:

```bash

sudo mkdir -p /etc/nginx/ssl

```

保存证书:

```bash

sudo nano /etc/nginx/ssl/mochif.crt

```

将源证书内容-----BEGIN CERTIFICATE----------END CERTIFICATE----- 完整内容)粘贴进去,Ctrl+X → Y → 回车保存。

保存私钥:

```bash

sudo nano /etc/nginx/ssl/mochif.key

```

将私钥内容-----BEGIN PRIVATE KEY----------END PRIVATE KEY----- 完整内容)粘贴进去,同样保存。

---

四、配置 Nginx 反代

创建配置文件:

```bash

sudo nano /etc/nginx/sites-available/mochif

```

粘贴以下内容:

```nginx

server {

listen 443 ssl;

server_name mochif.com;

ssl_certificate /etc/nginx/ssl/mochif.crt;

ssl_certificate_key /etc/nginx/ssl/mochif.key;

location / {

proxy_pass http://127.0.0.1:3000;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

# HTTP 自动跳转 HTTPS

server {

listen 80;

server_name mochif.com;

return 301 https://$host$request_uri;

}

```

启用配置并重载:

```bash

sudo ln -s /etc/nginx/sites-available/mochif /etc/nginx/sites-enabled/

sudo nginx -t # 检查语法

sudo systemctl reload nginx

```

nginx -t 输出 syntax is oktest is successful 说明配置无误。

---

五、Cloudflare SSL 模式设置

Cloudflare 控制台 → SSL/TLS → 概述,将加密模式改为**完全**。

不要选「完全(严格)」,因为源服务器证书不是公共 CA 签发的,严格模式不认。

| 模式 | 含义 |

|------|------|

| 灵活 | Cloudflare 到源服务器明文 HTTP,服务器无需证书 |

| 完全 | Cloudflare 到源服务器加密,接受自签或源服务器证书 |

| 完全(严格) | 同上,但只接受受信任 CA 签发的证书 |

---

六、放行服务器 443 端口

如果使用腾讯云,需要在安全组放行 443 端口:

腾讯云控制台 → 安全组 → 入站规则 → 添加:

| 协议 | 端口 | 来源 |

|------|------|------|

| TCP | 443 | 0.0.0.0/0 |

其他云服务商操作类似,防火墙/安全组记得放行。

---

七、访问链路说明

配置完成后,完整的访问链路如下:

```

用户浏览器

↓ HTTPS(Cloudflare 边缘证书)

Cloudflare CDN

↓ HTTPS(源服务器证书)

Nginx(443 端口)

↓ HTTP

应用服务(3000 端口)

```

访问 https://mochif.com 即可正常打开,浏览器显示绿锁。

---

扩展:新增服务只需两步

后续每增加一个服务(如在 4000 端口跑另一个应用),不需要重新申请证书:

1. Cloudflare 加一条子域名 A 记录(如 chat.mochif.com

2. 服务器加一个 Nginx 配置文件server_name 改成新子域名proxy_pass 指向新端口

证书通配符 *.mochif.com 覆盖所有子域名,15 年内无需任何维护。