Cloudflare 配置教程:API Token 权限 + 域名托管
适用对象:第一次使用 CloudSite、还没有配置过 Cloudflare 的管理员。 目标:让 CloudSite 能代替你在 Cloudflare 上创建 Pages 项目、上传站点文件、把自定义域名绑定到站点。
预计耗时:创建 Token 约 2 分钟;域名托管 5 分钟开始生效(NS 完全生效通常 5 分钟–24 小时);CloudSite 内配置约 1 分钟。
文中的界面示意图为文字版示意,Cloudflare 改版频繁,实际按钮文案可能略有差异(例如 Add a site / Add a domain),按相同位置的入口操作即可。
应用内入口:登录 CloudSite 后打开
/guide/cloudflare,或在「设置 → Cloudflare 授权」卡片点击「配置教程」。
目录
- 先理清三个概念
- 把域名托管到 Cloudflare
- 创建 API Token(最小权限)
- 取得 Account ID
- 在 CloudSite 里填写并验证
- 在 CloudSite 里绑定域名
- 排错速查表
- 安全与日常维护
- 附录:权限速查 / 命令行自检
1. 先理清三个概念
| 名词 | 是什么 | 在哪里看 |
|---|---|---|
| 域名 / Zone | 你在注册商买的域名,例如 example.com。托管到 Cloudflare 后,Cloudflare 成为它的 DNS 服务商。 | Cloudflare 首页 → Websites |
| 账户 / Account | Cloudflare 里的一个"工作空间",域名、Pages 项目都挂在它下面。Account ID 是 32 位十六进制字符串。 | 控制台 URL 或 Workers & Pages 概览页 |
| API Token | 给程序用的临时钥匙,只能做你授权的操作。CloudSite 用它创建 Pages 项目、上传文件、写 DNS。 | My Profile → API Tokens |
整体链路:
┌──────────────────────────────────────────┐
你的电脑/浏览器 ──▶ │ CloudSite(本机或服务器) │
└───────────────┬──────────────────────────┘
│ HTTPS + API Token
▼
┌──────────────────────────────────────────┐
│ Cloudflare API │
│ ├─ Pages:建项目 / 上传部署 / 绑域名 │
│ └─ DNS:写 CNAME 指向 <project>.pages.dev │
└───────────────┬──────────────────────────┘
│
访客 ──▶ https://example.com ──▶ Cloudflare(代理 + 证书)──▶ Pages
两条独立的前置条件,缺一不可:
- 域名已托管到 Cloudflare(NS 指向 Cloudflare,状态 Active)——绑定自定义域名需要;
- 有可用的 API Token + Account ID——调用 Cloudflare API 需要。
只上传模板、不绑定自己域名的话,用 Cloudflare 分配的
xxx.pages.dev也能访问,第 2 节可以稍后再做。但部署到 Pages 仍然需要 Token。
2. 把域名托管到 Cloudflare
如果你已经有域名在 Cloudflare(Websites 列表里状态是 Active),直接跳到 第 3 节。
2.1 准备
- 一个已经注册、能正常解析的域名(
example.com这种裸域); - 域名注册商的控制台账号密码(阿里云 / 腾讯云 / GoDaddy / Namecheap 等);
- 如果域名原来做过邮箱(MX)、验证(TXT)等记录,切换前先确认这些记录已导入 Cloudflare,否则切完 NS 邮箱可能收不到信。
域名还没有?先在任意注册商购买(
.com首年通常几十元)。Cloudflare 本身不负责卖新域名(Registrar 只支持转入已托管域名)。
2.2 在 Cloudflare 添加站点
- 登录 https://dash.cloudflare.com/;
- 首页右上角点击 Add a site(新版叫 Add a domain);
- 输入裸域:
example.com。- ❌ 不要填
https://example.com - ❌ 不要填
www.example.com(www 是子域,后面由 CloudSite 绑定)
- ❌ 不要填
- 选择套餐:Free(CloudSite 的全部功能在免费套餐可用);
- Cloudflare 会自动扫描现有 DNS 记录并列出,先逐条检查,尤其是
MX、TXT(SPF/DKIM/验证); - 页面会给出两条专属 Nameserver,例如:
┌──────────────────────────────────────────────────────────────┐
│ Complete your nameserver setup │
├──────────────────────────────────────────────────────────────┤
│ Replace your current nameservers with: │
│ │
│ ada.ns.cloudflare.com (复制) │
│ bob.ns.cloudflare.com (复制) │
│ │
│ ⓘ 两条都要改,顺序无所谓;不要只改一条。 │
└──────────────────────────────────────────────────────────────┘
每个账号分配的两条 NS 是固定的(不是每个域名随机),照抄即可。 示意图里的名字只是举例,以你页面显示的为准。
2.3 到注册商修改 NS
登录你的域名注册商,把 DNS 服务器 / Nameservers 改成上一步的两条 Cloudflare NS:
| 注册商 | 操作路径(大致) |
|---|---|
| 阿里云 | 控制台 → 域名 → 域名列表 → 管理 → DNS 修改(或 DNS 服务器)→ 修改 DNS 服务器 → 填两条 |
| 腾讯云 | 控制台 → 域名注册 → 我的域名 → 管理 → DNS 服务器 → 修改 |
| 华为云 | 控制台 → 域名注册 → 域名列表 → 管理 → DNS 修改 |
| GoDaddy | My Products → Domains → DNS → Nameservers → Change → I'll use my own nameservers |
| Namecheap | Domain List → Manage → Nameservers → Custom DNS |
| Cloudflare Registrar | 域名本来就在 Cloudflare,无需修改 |
要点:
- 只保留 Cloudflare 的两条 NS,把原来的 NS(如
dns1.hichina.com)删掉; - 有些注册商要求先关闭"域名锁定 / DNSSEC",否则保存失败;
- DNSSEC:如果注册商处启用了 DNSSEC,先去注册商删除 DS 记录,再改 NS。否则切换后域名会解析失败。等 Cloudflare 显示 Active 后,可在 Cloudflare 的 DNS → Settings → DNSSEC 重新开启,并把 Cloudflare 给出的 DS 记录填回注册商;
- 改完保存,注册商一般提示"生效需要 24–48 小时",实际通常几分钟到几小时。
2.4 等待生效并验证
回到 Cloudflare → 你的域名 → Overview,状态会经历:
Pending Nameserver Update ──等待──▶ Active
(等待注册商把 NS 指向 Cloudflare) (可以正常使用)
验证命令(任选其一):
# macOS / Linux
dig NS example.com +short
dig NS example.com @1.1.1.1 +short
# Windows PowerShell
nslookup -type=NS example.com 1.1.1.1
输出里同时出现你页面上那两条 *.ns.cloudflare.com 就说明 NS 已生效。若本地有缓存,等几分钟或换用 @1.1.1.1 再查。
Cloudflare 偶尔会抽样检测,状态变 Active 前不要急着绑定域名;绑定会失败并提示找不到 Zone。
2.5 检查 DNS 记录(很重要,别跳过)
进入 DNS → Records,确认:
| 类型 | 名称 | 内容 | 说明 |
|---|---|---|---|
| A / CNAME | example.com | 你的源站 IP 或主机名 | 如果站点只放 Cloudflare Pages,可以没有;CloudSite 绑定域名时会自动建 CNAME |
| CNAME | www | example.com | 可选 |
| MX | example.com | 邮箱服务商地址 | 有企业邮箱就必须保留,否则切完 NS 收不到信 |
| TXT | example.com | v=spf1 ... / DKIM / 验证串 | 按原样保留 |
代理状态(橙色云):
DNS 记录列表
┌──────────────────────────────────────────────────────────────┐
│ Type Name Content Proxy │
│ CNAME example.com home-abc.pages.dev 🟠 已代理 │
│ A www ... 🟠 已代理 │
│ MX example.com mx.example-mail.com ⚪ DNS only│
└──────────────────────────────────────────────────────────────┘
- 🟠 橙色云(Proxied):流量经过 Cloudflare,可以用 CDN、自动 HTTPS、隐藏源站;
- ⚪ 灰色云(DNS only):只解析不代理。MX 记录必须是灰色;
- CloudSite 绑定时写入的 CNAME 会强制为橙色云,不要手动改成灰色,否则 Pages 的证书校验和 HTTPS 会出问题。
2.6 开启 HTTPS(推荐)
- SSL/TLS → Overview:模式选 Full (strict);
- ❌ 不要选 Flexible(会造成重定向循环 / 混合内容);
- Pages 项目由 Cloudflare 托管,Full (strict) 可直接工作;
- SSL/TLS → Edge Certificates:
- Always Use HTTPS → 打开;
- Automatic HTTPS Rewrites → 打开;
- Minimum TLS Version → 1.2;
- CAA 记录检查:如果 DNS 里有
CAA记录,确认它允许 Cloudflare 使用的 CA(如letsencrypt.org、pki.goog、digicert.com)。不允许的话证书会一直签不下来。
3. 创建 API Token(最小权限)
⚠️ 不要使用 Global API Key(全局密钥)。它拥有整个账号的全部权限,泄露后果严重。CloudSite 只需要一个权限受限的 Custom Token。
3.1 进入创建页面
- 登录 https://dash.cloudflare.com/;
- 点击右上角头像:
┌──────────────────────────────────────────────┐
│ Cloudflare [头像 ▾] │
│ ┌─────────┴──────────────┐
│ │ My Profile │
│ │ Manage Account │
│ │ Log out │
│ └────────────────────────┘
└──────────────────────────────────────────────┘
- 选择 My Profile(我的个人资料) → 左侧 API Tokens(API 令牌);
- 或直接打开:https://dash.cloudflare.com/profile/api-tokens。
3.2 选择 Custom Token
页面上有几个现成模板(Edit Cloudflare Workers 等),都不要用,点击:
Create Token → Custom token → Get started
┌──────────────────────────────────────────────────────────────────┐
│ Create Custom Token │
├──────────────────────────────────────────────────────────────────┤
│ Token name │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ CloudSite │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Permissions │
│ ┌────────────────┬──────────────────────┬──────────────────┐ │
│ │ Account │ Cloudflare Pages │ Edit │ │
│ ├────────────────┼──────────────────────┼──────────────────┤ │
│ │ Zone │ DNS │ Edit │ │
│ ├────────────────┼──────────────────────┼──────────────────┤ │
│ │ Zone │ Zone │ Read │ │
│ ├────────────────┼──────────────────────┼──────────────────┤ │
│ │ Account │ Account Settings │ Read (可选) │ │
│ └────────────────┴──────────────────────┴──────────────────┘ │
│ │
│ Zone Resources │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Include → All zones (或:Specific zone → example.com) │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Account Resources │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Include → 你的账号名称 / 你的账号 ID │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ TTL:建议 90 天(到期前重新生成并更新到 CloudSite) │
│ │
│ [ Continue to summary ] │
└──────────────────────────────────────────────────────────────────┘
3.3 权限说明(为什么是这四条)
| # | 资源(Resource) | 权限组(Permission) | 级别 | 用途 | 是否必需 |
|---|---|---|---|---|---|
| 1 | Account | Cloudflare Pages | Edit | 创建 Pages 项目、创建部署、上传文件、添加/删除 Pages 自定义域名 | ✅ 必需 |
| 2 | Zone | DNS | Edit | 读取/改写/创建域名下的 CNAME 记录(指向 <project>.pages.dev) | ✅ 必需 |
| 3 | Zone | Zone | Read | 列出账号下的域名,自动定位 example.com 属于哪个 Zone | ✅ 必需 |
| 4 | Account | Account Settings | Read | GET /accounts 列出账号,供「验证获取」自动填充 Account ID | ⭕ 推荐 |
- 只勾选这四项,不要勾
Zone: Edit、Account: Edit、Workers: Edit之类的全权权限; - Zone Resources:
Include → All zones:以后新增域名不用改 Token,最省事;Include → Specific zone → example.com:权限最小,但每加一个域名都要回来更新 Token;
- Account Resources:只勾你自己的账号。漏勾会出现
Could not route to /client/v4/accounts/...或 403; - 第 4 项没勾也能用:到 CloudSite 里手动填 Account ID 即可(见第 4 节)。只是「验证获取」不会显示账号列表。
3.4 生成并保存 Token
- 点 Continue to summary → 核对权限 → Create Token;
- Token 只显示一次,形如:
CloudSite 的 Token 已创建
┌──────────────────────────────────────────────────────────────────┐
│ 复制这个 Token(离开页面后无法再查看) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ v1.0-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │ │
│ │ [ Copy ] │ │
│ └────────────────────────────────────────────────────────────┘ │
│ ⚠️ 不要截图发群、不要提交到 Git、不要写进前端代码 │
└──────────────────────────────────────────────────────────────────┘
- 立即粘贴到 CloudSite 的设置页(下一步),或先存进密码管理器;
- 如果 Token 泄露:回到 API Tokens 列表,点击该 Token → Roll(换新)或 Delete(删除),再把新值填到 CloudSite。
想确认权限范围:同一页面的 Token 列表里可以看到每个 Token 的 Permissions 摘要和 Last used 时间。
4. 取得 Account ID
Account ID 是 32 位十六进制字符串,例如 a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6。
方法 A:从控制台 URL 取(最快)
登录后地址栏是:
https://dash.cloudflare.com/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6/home
└─────────── 这一段就是 Account ID ───────────┘
方法 B:从 Workers & Pages 页面取
左侧菜单 Workers & Pages → 右侧概览卡片底部有 Account ID,点复制图标。
方法 C:让 CloudSite 自动获取
在设置页粘贴 Token 后点 「验证获取」。前提是 Token 含 Account → Account Settings → Read;否则账号列表为空,请用方法 A/B 手动填入。
❗ 常见混淆:
cfut_开头的是 API Token,不是 Account ID;- 32 位十六进制的是 Account ID;
- 设置页会自动校验格式,填错会直接提示。
5. 在 CloudSite 里填写并验证
- 登录 CloudSite(管理员);
- 左侧 设置 → 顶部 Cloudflare 卡片:
┌──────────────────────────────────────────────────────────────────┐
│ Cloudflare 授权 │
├──────────────────────────────────────────────────────────────────┤
│ API Token │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ •••••••••••••••••••••••••••••• [👁] [🔑]│ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Account ID │
│ ┌──────────────────────────────────────────────┐ ┌──────────┐ │
│ │ a1b2c3d4e5f6... │ │ 验证获取 │ │
│ └──────────────────────────────────────────────┘ └──────────┘ │
│ │
│ 可访问账号 · 点击选择 ← Token 有 Account Settings:Read │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ My Company a1b2c3d4e5f6... ✓ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ [保存凭据] [从 Wrangler 导入授权] [创建 Token ↗] │
└──────────────────────────────────────────────────────────────────┘
- 依次操作:
- 粘贴 API Token;
- 点 「验证获取」;
- 出现账号列表:点击你的账号,自动填入 Account ID;
- 没有账号列表:手动粘贴第 4 节取得的 Account ID;
- 点 「保存凭据」;
- 右侧「连接状态」中 Cloudflare 应变为 已连接。
- 验证成功的判断标准(满足全部即可):
✅ 右侧「连接状态 → Cloudflare」显示 已连接
✅ Account ID 为 32 位十六进制,没有红色格式错误
✅ 「验证获取」不报 401 / 403
✅ 站点详情页点「部署」能创建 Pages 项目(第一次部署会验证 Pages 权限)
Wrangler 导入只适合本机开发:先在终端执行
npx wrangler login,再点「从 Wrangler 导入授权」。 服务器部署时不要用这个方式(服务器上没有你的浏览器授权)。OAuth Token 的权限由 wrangler 决定,通常比自定义 Token 大。
6. 在 CloudSite 里绑定域名
6.1 前提
- 域名已在同一个 Cloudflare 账号下,状态 Active(第 2 节);
- 站点已经至少部署成功一次(Pages 项目已存在,CloudSite 需要读取它真实的
pages.dev子域); - Token 含 Pages:Edit + DNS:Edit + Zone:Read。
6.2 操作步骤
- 打开站点详情页 → 域名(或「绑定域名」);
- 输入域名,例如:
- 子域:
shop.example.com - 裸域:
example.com
- 子域:
- 点击 绑定。
CloudSite 会自动完成:
① 在你的账号里找到 example.com 对应的 Zone(最长后缀匹配)
② POST /accounts/<id>/pages/projects/<project>/domains ← 把域名挂到 Pages 项目
③ 读取项目真实子域(可能是 home-abc.pages.dev,而不是 home.pages.dev)
④ 写入/改写 CNAME:
example.com → home-abc.pages.dev (橙色云代理,TTL Auto)
comment = "Managed by CloudSite"
⑤ 等待 Cloudflare 签发证书(通常 1–5 分钟)
DNS 记录最终长这样(Cloudflare → DNS → Records):
┌────────┬──────────────────┬─────────────────────────┬─────────────┐
│ Type │ Name │ Content │ Proxy │
├────────┼──────────────────┼─────────────────────────┼─────────────┤
│ CNAME │ example.com │ home-abc.pages.dev │ 🟠 Proxied │
│ CNAME │ www.example.com │ home-abc.pages.dev │ 🟠 Proxied │
└────────┴──────────────────┴─────────────────────────┴─────────────┘
↑ 以项目实际 subdomain 为准
- 状态变化:
pending(证书配置中) ──1–5 分钟──▶ active(已生效)
- 验证:
dig CNAME shop.example.com +short
curl -I https://shop.example.com
# 期望:HTTP/2 200,证书由 Cloudflare 签发
6.3 注意事项
- 不要手动修改/删除
comment = Managed by CloudSite的 CNAME;CloudSite「移除域名」时会删除它(手动改过的记录会保留); - 根域(
example.com)写 CNAME 是合法的:Cloudflare 默认开启 CNAME Flattening; - 已存在同名 A / CNAME 记录时,CloudSite 会改写成指向 Pages 的 CNAME。如果那条记录你在别处还要用,先备份或换个子域;
- 一个站点可以绑多个域名;Free 套餐每个 Pages 项目上限 100 个自定义域名(Pro 250,Business/Enterprise 500);
- 证书签发期间访问出现
522 / 526 / ERR_SSL属正常,等状态变 active 再看; - Cloudflare 上删除站点/项目不会自动解绑,需要到 Pages → 项目 → Custom domains 里手动清理。
7. 排错速查表
| 现象 / 报错 | 原因 | 解决 |
|---|---|---|
401 / 403 Authentication error | Token 无效、过期、权限不足 | 核对四类权限;重新生成 Token;确认 Account Resources 勾了你的账号 |
Could not route to /client/v4/accounts/... | Account ID 填错 / 填成了 Token | 重新取 32 位 Account ID;cfut_ 开头的是 Token |
找不到 xxx 所属的 Cloudflare Zone | 域名不在该账号下;Token 缺 Zone:Read;Zone Resources 没包含该域名 | 确认域名在 Websites 列表;补权限;Zone Resources 选 All zones |
| 「验证获取」后没有账号列表 | Token 缺 Account Settings:Read | 手动填 Account ID,或给 Token 补该权限 |
绑定域名报 Project does not exist | 还没部署过 | 先在站点详情页点「重新部署」 |
绑定后访问 522 / 526 | 证书还在签发;SSL 模式错误 | 等 1–5 分钟;SSL/TLS 改为 Full (strict) |
| 证书一直签不下来 | CAA 记录不允许 Cloudflare 的 CA | 检查/删除 CAA,或放行 letsencrypt.org、pki.goog |
| 域名解析到旧网站 | 同名 A 记录存在,或浏览器缓存 | 看 DNS 记录是否已被改写为 CNAME;刷新本地 DNS 缓存 |
NS 一直 Pending Nameserver Update | 注册商 NS 没改成功;DNSSEC 冲突 | dig NS 域名 +short 确认;删除 DS 记录后重新改 NS |
| 邮箱突然收不到信 | 切 NS 时 MX/TXT 没导入 | 在 Cloudflare DNS 里补回原 MX / SPF / DKIM |
项目名被占用(81044 等) | xxx.pages.dev 已被别人使用 | CloudSite 会自动读取真实子域(可能带随机后缀),重新绑定一次即可 |
429 Too Many Requests | 批量操作过快 | 降低并发,稍后重试 |
8. 安全与日常维护
Token 权限最小化
- CloudSite 只需要 3 条必需权限(+1 条可选);
- 每个环境(本机 / 测试 / 生产)使用不同的 Token,方便单独吊销;
- 不要使用 Global API Key,也不要给
Account:Edit、Zone:Edit全权。
存放位置
- CloudSite 把 Token 保存在数据目录:
./.data/config.json(管理员)或./.data/users/<id>/config.json(普通用户),权限600; - 不要提交到 Git、不要截图发群、不要写进前端代码或浏览器 localStorage;
- 服务器上的
.data目录要定期备份,且不要随发布包一起分发。
轮换与吊销
- 建议 Token 设置 90 天 TTL;
- 到期前:Cloudflare → API Tokens → Roll/新建 → CloudSite 设置页更新 → 保存凭据;
- 怀疑泄露:立即 Delete 该 Token(比改密码更快止损),检查 Audit Log 里的 API 调用记录。
域名安全
- 注册商处开启域名锁与双重验证;
- Cloudflare 账号开启 2FA;
- 邮箱的 MX/SPF/DKIM 记录不要随意删除。
9. 附录:权限速查 / 命令行自检
9.1 权限速查(复制到 Cloudflare 创建页对照)
Account → Cloudflare Pages → Edit (必需)
Zone → DNS → Edit (必需)
Zone → Zone → Read (必需)
Account → Account Settings → Read (可选,自动列出账号)
9.2 用命令行验证 Token(不经过 CloudSite)
# 把 Token 放进环境变量,避免出现在 shell 历史里
read -rsp "Cloudflare API Token: " CF_TOKEN; echo
CF_ACCOUNT="你的32位AccountID"
# 1) Token 是否有效
curl -s https://api.cloudflare.com/client/v4/user/tokens/verify \
-H "Authorization: Bearer $CF_TOKEN" | jq '{success, errors, status: .result.status}'
# 2) 能列出哪些账号(需要 Account Settings:Read)
curl -s "https://api.cloudflare.com/client/v4/accounts?per_page=50" \
-H "Authorization: Bearer $CF_TOKEN" | jq '{success, accounts: [.result[].name]}'
# 3) 能列出哪些域名(需要 Zone:Read)
curl -s "https://api.cloudflare.com/client/v4/zones?per_page=50" \
-H "Authorization: Bearer $CF_TOKEN" | jq '{success, zones: [.result[].name]}'
# 4) 能访问该账号的 Pages 项目(需要 Pages:Edit,读操作同样需要)
curl -s "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/pages/projects?per_page=5" \
-H "Authorization: Bearer $CF_TOKEN" | jq '{success, projects: [.result[].name]}'
期望:四条都是 "success": true;第 3、4 条能看到你的域名 / 项目(新账号为空数组也算成功)。
9.3 界面位置速查
| 要做什么 | URL |
|---|---|
| 添加域名 / 看 Websites | https://dash.cloudflare.com/ |
| 管理 API Token | https://dash.cloudflare.com/profile/api-tokens |
| 看 Account ID | https://dash.cloudflare.com/<32位ID>/home |
| 改 DNS 记录 | https://dash.cloudflare.com/<32位ID>/<域名>/dns/records |
| 看 Pages 项目 | https://dash.cloudflare.com/<32位ID>/workers-and-pages |
| 看 Zone 状态 | https://dash.cloudflare.com/<32位ID>/<域名> |
| 官方 Token 权限参考 | https://developers.cloudflare.com/fundamentals/api/reference/permissions/ |
一页纸流程(可打印/转发)
① 注册 Cloudflare → Add a site → 输入 example.com → 选 Free
② 到注册商把 NS 改成 Cloudflare 给的两条 → 等状态 Active
③ 检查 MX / TXT 记录,SSL/TLS 设为 Full (strict)
④ My Profile → API Tokens → Create Custom Token
Account · Cloudflare Pages · Edit
Zone · DNS · Edit
Zone · Zone · Read
Account · Account Settings · Read(可选)
Zone Resources: All zones Account Resources: 你的账号
⑤ 复制 Token + 找到 32 位 Account ID
⑥ CloudSite → 设置 → 粘贴 Token / Account ID → 验证获取 → 保存凭据
⑦ 新建站点 → 部署成功 → 站点详情 → 绑定域名 shop.example.com
⑧ 等 1–5 分钟证书生效 → 访问 https://shop.example.com