| 阶段 | 主题 | 学完你能做 | 耗时 |
|---|---|---|---|
| 0 | 概念扫盲 | 看懂产品地图,知道每个产品解决什么 | 30 分钟 |
| 1 | 账户 + 域名接入 | 接入域名,获免费 CDN / SSL / DDoS | 1 小时 |
| 2 | 第一个静态站点(Pages) | 部署前端项目成公网站点,自动 HTTPS | 1 小时 |
| 3 | 第一个边缘函数(Workers) | 写并上线 API / 代理,跑通 Wrangler | 1–2 小时 |
| 4 | 数据存储怎么选 | 按场景选对 KV/D1/R2 并绑定 Worker | 2–3 小时 |
| 5 | 内网穿透(Tunnel) | 不开端口安全暴露内网服务 | 1 小时 |
| 6 | 安全与性能实践 | 配得快又稳,避开最常见坑 | 1 小时 |
概念扫盲
What is Cloudflare一句话定位
Cloudflare 是一张覆盖全球的边缘网络,站在「访客」和「你的服务器/源站」之间。它最初是 CDN(加速 + 缓存),如今已长成一套完整开发平台:能在节点上跑代码(Workers)、存数据(KV/D1/R2)、做身份认证(Zero Trust)、防攻击(WAF)。
三个核心心智模型
- 代理流量(Proxy):域名 NS 改成 Cloudflare 后,请求先到 CF 再回源。这就是「橙云 / 灰云」图标——橙云=流量经过 CF(受保护、可缓存);灰云=仅 DNS 解析、直连源站。
- 边缘网络(Edge):代码和数据不是跑在固定服务器,而是尽量跑在离访客最近的节点,延迟低、跨地域一致。
- 免费套餐够起步:个人项目、学习、小流量原型几乎都能在 Free 跑(见附录 A)。
产品地图(先混脸熟)
| 类别 | 产品 | 一句话用途 | 类比 |
|---|---|---|---|
| 网络/安全 | DNS·CDN·SSL·WAF·DDoS | 解析、加速、加密、防攻击 | 门面 + 保安 |
| 计算 | Workers | 边缘跑服务端代码(API/鉴权/代理) | 云函数 |
| 站点 | Pages | 前端项目一键部署成网站 | 静态托管 |
| 存储 | KV | 键值存储,读多写少、最终一致 | 全局配置表 |
| 存储 | D1 | 边缘 SQLite 关系型库 | 轻型 MySQL |
| 存储 | R2 | 对象存储,无出口费 | S3 替代品 |
| 存储 | Durable Objects | 强一致单点协调(聊天室/计数器) | 协调器 |
| 网络 | Zero Trust Tunnel | 不开端口暴露内网服务 | 内网穿透 |
| AI | Workers AI·Vectorize | 跑模型、存向量做语义检索 | AI 底座 |
账户与域名接入
DNS · SSL · CDN- 注册并添加站点。打开 dash.cloudflare.com 注册(免费足够)→ Add a Site → 输入根域名(裸域,不带 www/https)→ 选 Free。CF 自动扫描现有 DNS 记录,逐条核对 A / CNAME / MX / TXT。
- 修改 NS。CF 分配两个 NS(形如
xxx.ns.cloudflare.com)。到域名注册商后台替换掉旧 NS。通常 10 分钟–数小时生效,状态变 Active 并收到邮件。校验:dig +short ns yourdomain.com。 - 配置 SSL 模式。路径 SSL/TLS → Overview,选 Full (Strict)(源站有有效证书时)。源站无证书先选 Full,装好 Let's Encrypt 再升 Strict。
- 开安全/性能开关。Always Use HTTPS、Brotli、HTTP/3、Bot Fight Mode、Security Level Medium、Always Online 全部打开。
SSL 模式怎么选(最容易踩坑)
| 模式 | 浏览器↔CF | CF↔源站 | 建议 |
|---|---|---|---|
| Off | 明文 | 明文 | 别用 |
| Flexible | HTTPS | HTTP | 易重定向循环,不推荐 |
| Full | HTTPS | HTTPS(不校验) | 源站自签证书时 |
| Full (Strict) | HTTPS | HTTPS(校验) | 推荐 |
mail.yourdomain.com 必须保持灰云(DNS only);② 后台登录重定向循环——SSL 用了 Flexible,改 Strict;③ 后台被缓存——给 /admin/* 设 Bypass;④ 源站看到的全是 CF IP——Nginx 配 set_real_ip_from + real_ip_header CF-Connecting-IP(IP 段见 cloudflare.com/ips-v4)。第一个静态站点 · Pages
Deploy a static site三种部署方式
连 GitHub/GitLab,push 即部署,每个 PR 自动生成预览链接。
命令行创建部署,或本地构建完拖到 Dashboard。
动手(以 C3 + 框架为例)
# 需要 Node.js 16.17+,建议 nvm/volta 管理版本
npm create cloudflare@latest -- my-static-site
# 选项:Hello World → Static site → TypeScript → git Yes → deploy No
cd my-static-site
npx wrangler dev # 本地预览 http://localhost:8787
npx wrangler deploy # 部署(首次会让你登录 Cloudflare)
绑定自定义域名
Pages 项目 → Custom domains → Set up a custom domain,输入 www.yourdomain.com 或裸域。CF 自动加 CNAME 并签发证书,几分钟生效。建议把 www 与裸域都接上,用 Redirect Rules 统一跳转。
第一个边缘函数 · Workers
Write & deploy a Worker步骤 1:装好工具链
Workers 用 Wrangler(CF 的 CLI),官方推荐用 C3 创建项目,需 Node.js ≥ 16.17。
npm create cloudflare@latest -- my-first-worker
# 选项:Hello World → Worker only → JavaScript → git Yes → deploy No
cd my-first-worker
C3 生成:wrangler.jsonc(配置)、src/index.js(入口)、package.json。
步骤 2:写一个多路由 Worker
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
if (url.pathname === "/") {
return new Response("Hello from Cloudflare Workers!", {
headers: { "content-type": "text/plain; charset=utf-8" },
});
}
if (url.pathname === "/api/time") {
return Response.json({
timestamp: Date.now(),
iso: new Date().toISOString(),
region: request.cf?.colo || "unknown", // 边缘节点代码
});
}
if (url.pathname === "/api/echo" && request.method === "POST") {
const body = await request.json();
return Response.json({ received: body, method: request.method });
}
return new Response("Not Found", { status: 404 });
},
};
fetch(request, env, ctx) 是核心:每次请求都调用它,三参数分别是「请求 / 环境变量·bindings / 运行上下文」。
步骤 3:本地开发 + 部署
npx wrangler dev # 首次会开浏览器登录
curl http://localhost:8787/
curl http://localhost:8787/api/time
npx wrangler deploy # 首次让你创建 *.workers.dev 子域
步骤 4:环境变量与密钥
普通变量写进 wrangler.jsonc 的 vars(会进代码,别放密钥);密钥用 Secrets,绝不进仓库:
npx wrangler secret put MY_SECRET # 代码里读 env.MY_SECRET
wrangler.jsonc 加 "compatibility_flags": ["nodejs_compat"]。数据存储怎么选
KV · D1 · R2决策表(先想清楚再选产品)
| 你要存什么 | 用哪个 | 一句话理由 |
|---|---|---|
| 配置 / 特性开关 / A-B / 读多写少 | KV | 全局分布、读极快、容忍短暂不一致 |
| 用户 / 订单 / 文章等结构化数据 | D1 | 真·关系型:表/索引/事务/联表 |
| 图片 / 视频 / 备份 / 大文件 | R2 | 对象存储、无出口费 |
| 已有 PostgreSQL / MySQL | Hyperdrive | 复用现有库、加速连接 |
| 聊天室 / 精确计数器(强一致) | Durable Objects | 单实体强一致协调 |
KV 上手(配置 / 特性开关)
npx wrangler kv namespace create CONFIG # 记下返回的 ID
// wrangler.jsonc 绑定: { "kv_namespaces": [{ "binding":"CONFIG", "id":"" }] }
const flags = await env.CONFIG.get("flags", "json");
await env.CONFIG.put("flags", JSON.stringify({ newUI: true }));
D1 上手(边缘 SQLite)
npx wrangler d1 create mydb
npx wrangler d1 execute mydb --remote --sql "CREATE TABLE posts (id INTEGER PRIMARY KEY, slug TEXT UNIQUE, body TEXT)"
// 注意:过滤列一定要建索引,否则全表扫描按扫描行数计费
const post = await env.DB.prepare("SELECT * FROM posts WHERE slug = ?").bind(slug).first();
R2 上手(无出口费的对象存储)
# 先在 Dashboard 启用 R2(免费额度需手动开启)
npx wrangler r2 bucket create my-assets
// wrangler.jsonc: { "r2_buckets": [{ "binding":"ASSETS", "bucket_name":"my-assets" }] }
await env.ASSETS.put("avatar.png", fileData);
const obj = await env.ASSETS.get("avatar.png");
env.XXX 访问。一个 Worker 可同时绑多个,但每多一个产品就多一个要运维的部件,按需添加。内网穿透 · Tunnel
Zero Trust Tunnel它解决什么
传统端口转发三大痛点:要开端口、家宽 IP 暴露、自己管证书。Tunnel 反过来——由你服务器主动向外连一条加密隧道到 CF,外部用户先到 CF 再经隧道回源。源站零入站端口、零公网 IP 暴露。
方式 A:Dashboard(远程托管,推荐新手)
- 打开 Zero Trust 控制台 → Networks → Tunnels → Create a tunnel → 选 Cloudflared。
- 命名隧道,复制安装命令(含令牌)在服务器跑,注册成系统服务(开机自启、崩溃重启)。
- 看到 Healthy 绿标即连接成功。
- Public Hostname → Add:填子域(如
app)、域名、Service: http://localhost:8080。 - 访问
https://app.yourdomain.com即可——CF 自动发证书,源站无需配 TLS。
方式 B:CLI(config-as-code,多服务 / 进版本库)
cloudflared tunnel login
cloudflared tunnel create my-tunnel
cloudflared tunnel route dns my-tunnel app.yourdomain.com
# ~/.cloudflared/config.yml
tunnel: my-tunnel
credentials-file: /root/.cloudflared/my-tunnel.json
ingress:
- hostname: app.yourdomain.com
service: http://localhost:8080
- hostname: files.yourdomain.com
service: http://localhost:80
- service: http_status:404 # 必填兜底,放最后
cloudflared tunnel run my-tunnel # 前台测试
sudo cloudflared service install # 装成系统服务
快速验证(无需账号)
cloudflared tunnel --url http://localhost:8080
# 生成随机 https://xxx.trycloudflare.com,关掉即失效,仅演示/Webhook 测试
加一层访问控制(很重要)
Tunnel 本身让服务人人可访问。加 Zero Trust Access 收口:
- 邮箱登录:Access → Applications → 设域名 → 策略 Allow 邮箱后缀
@yourdomain.com,用户先看 CF 登录页。 - 一次性 PIN:策略 Allow 指定邮箱 → 认证方式 One-time PIN,输入邮箱收码即进,免密免注册。
- Service Token:给程序调用,请求带
CF-Access-Client-Id/CF-Access-Client-Secret头。
ssh://localhost:22)、TCP(tcp://localhost:5432)、数据库等。安全与性能实践
Best practices加密与身份
- SSL 永远 Full (Strict)(源站有有效证书时)。
- 开 Always Use HTTPS + 谨慎开 HSTS。
- 邮件相关记录保持灰云(DNS only)。
WAF(免费也够用)
Free 含 Cloudflare Free Managed Ruleset(OWASP Top 10 如 SQL 注入、XSS 子集)+ 自定义规则(按 IP / 国家 / UA / 路径拦截)。
缓存策略
免费 3 条 Page Rules(或新版 Cache Rules):*/uploads/* → Cache Everything;*/admin/* → Bypass;全站 → 总是 HTTPS。校验命中看响应头 CF-Cache-Status(HIT/MISS/BYPASS/DYNAMIC)。源站设 Cache-Control: private 则 CF 不缓存。
防 Bot 与限速
- 开 Bot Fight Mode(免费)。
- 对外表单/登录用 Turnstile(隐私友好验证码)替代手写验证。
- 防火墙规则给敏感路径限流或挑战。
架构纪律(免费额度不被打爆)
免费额度速查
Free tier · 2026-10| 产品 | 免费额度关键项 | 超限后果 |
|---|---|---|
| Workers | 10 万请求/天;10ms CPU/请求;50 子请求;128MB;最多 100 脚本;脚本 3MB | 请求失败 429 |
| Pages | 站点不限;500 构建/月;每站 2 万文件(单文件 25MB);静态无限带宽 | 构建排队 |
| D1 | 10 库/账户;每库 500MB(共 5GB);500 万行读/天;10 万行写/天;7 天 Time Travel | 查询失败至重置 |
| KV | 10 万读/天;1000 写-删-列/天;1GB 存储 | 读/写失败 |
| R2 | 10GB 存储;100 万 A 类/月;1000 万 B 类/月;无出口费(需先启用) | 超出计费 |
| WAF | Free Managed Ruleset + 自定义规则 | — |
| 其他免费 | 3 条 Page Rules、Email Routing、Tunnel、Turnstile、Zaraz | — |
付费起步:Workers Paid $5/月,含 1000 万请求 + 3000 万 CPU-ms,解除大部分限制;R2 存储 $0.015/GB/月;D1 读 250 亿行/月后 $0.001/百万行。无出口/带宽费是相较 AWS S3 的最大优势(S3 出流量约 $0.09/GB,R2 为 $0)。
学习资源清单
Where to go deeper官方文档(首选)
社区好文(概念通俗)
资料来源
| 主题 | 来源 |
|---|---|
| 站点接入 | BeoHosting · 16IDC · Enterno |
| Workers | 官方 Get Started · InitHTML |
| 产品地图/选型 | 官方 Dev Platform · Flavio Copes · VMSS |
| 免费额度 | ToolFreebie(实测 2026-10-02) · InitHTML 2026 · Buildoto |
| Tunnel | 官方文档 · TechRiseUps · SelfHosting.sh |