Cloudflare Workers 是跑在 Cloudflare 全球边缘节点的 Serverless 函数:代码不是起一台容器,而是被塞进 V8 isolate,在全球几百个节点上毫秒级冷启动。它最适合做「请求进来的瞬间干点轻活」——改个响应头、做反代、接 KV 缓存、给 R2 套个上传 / 鉴权层。相比 Vercel 函数(Node 运行时)和 Neon(数据库),Workers 是「贴着用户最近的、最便宜的计算」。
本篇是实测向教程,重点在「免费层给多少」和「哪里会踩坑」。控制台 / 文档:workers.cloudflare.com。免费层无需绑卡即可部署到
*.workers.dev 子域名(想绑自己域名再接解析即可)。一、免费层额度清单(先看清边界)
Workers 免费层叫 Workers Free,2026 年实测到的量级如下(具体以 官网定价页 为准):
| 资源 | 免费层额度 | 说明 |
|---|---|---|
| 请求数 | 100,000 次 / 天 | 硬上限,超了需升级付费计划 |
| CPU 时长 | 10 ms / 请求 | 免费层单请求最多跑 10ms CPU(付费可到 50ms+) |
| 子请求(subrequest) | 50 次 / 请求 | 免费层每个请求内最多发起 50 次子请求 |
| Workers KV | 读 10 万 / 天、写 1 千 / 天、存 1 GB | 边缘键值存储,附赠的免费额度 |
| 部署子域 | *.workers.dev 免费 | 无需自有域名即可上线;绑自有域名需把域名解析到 Cloudflare |
| Worker 脚本数 | 可创建多个 | 免费层允许同时维护多个脚本项目 |
⚠️ 踩坑 1 — 10 万次 / 天是「硬上限」,不是软限速。免费层请求一旦超量,Cloudflare 会直接拒绝(表现为 1015 或函数不响应),不会温柔降级。对策:用 Cache API / KV 缓存结果,把「每个用户请求」收敛成「少量回源」;真有稳定大流量再升付费。
二、适合用它做什么
- API 网关 / 反代:给后端(Neon、Supabase)套一层,加鉴权、改写响应、隐藏真实域名。
- 边缘缓存层:把 R2 的对象用 Worker 包成带签名的下载 / 上传接口,省去单独鉴权服务。
- Webhook 接收 / 转发:轻量接收第三方回调、写入 KV 或转发,毫秒级响应。
- 不适合:重 CPU 任务(>10ms)、长连接 / WebSocket(需特定计划)、强一致事务、超高频写 KV。
三、开通全流程(实测步骤)
- 注册 Cloudflare 账号。进 dash.cloudflare.com 注册(免费层无需绑卡)。绑定自有域名可选,不影响先用
workers.dev。 - 安装 Wrangler。
npm install -g wrangler(或用npx wrangler)。Wrangler 是官方 CLI,本地开发 + 部署都靠它。 - 登录授权。跑
wrangler login,浏览器跳授权后拿到凭证(凭证存在本地,不要提交进 git)。 - 初始化项目。
wrangler init my-worker,选「Hello World (fetch handler)」模板,会生成src/index.js+wrangler.toml。 - 写代码。在
src/index.js实现fetch入口(示例见第四节)。 - 本地调试。
wrangler dev本地起一个边缘运行时,http://localhost:8787实时测,改完即生效。 - 部署上线。
wrangler deploy,得到https://my-worker.<你的子域>.workers.dev,全球边缘即可访问。 - (可选)绑 KV / R2。在
wrangler.toml声明绑定(见第四节),让 Worker 直接读写边缘存储。
四、最小可跑示例
一个返回 JSON、并带一个静态问候的 Worker(src/index.js):
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
// 简单 API:/api/hello 返回 JSON
if (url.pathname === '/api/hello') {
return Response.json({ ok: true, msg: '来自边缘节点' });
}
// 默认问候
return new Response('Hello from Cloudflare Worker!', {
headers: { 'content-type': 'text/plain; charset=utf-8' }
});
}
}
绑定 KV 的 wrangler.toml 片段(部署时 env.MY_KV 即可用):
name = "my-worker"
main = "src/index.js"
compatibility_date = "2024-09-23"
[[kv_namespaces]]
binding = "MY_KV"
id = "你的_kv_namespace_id"
把 Worker 当 R2 的上传 / 鉴权网关时,再在 wrangler.toml 加 [[r2_buckets]] 绑定即可,部署到 Cloudflare Pages 同生态,零成本拼全栈。
五、7 个真实踩坑提醒
⚠️ 踩坑 2 — 免费层单请求只有 10ms CPU,重活会超时。解析大 JSON、循环很多次、调慢接口,超过 10ms CPU 就报
1102 exceeded CPU。对策:把重计算挪到后台任务或拆小请求;需要更长运行时间就升付费(50ms 起)。⚠️ 踩坑 3 — KV 是「最终一致 + 写限频」。免费 KV 每天只有 1 千次写、10 万次读,而且写入后边缘节点同步有延迟,刚写的值在另一地读可能还是旧的。对策:别把 KV 当强一致主数据库;高频写场景换 Neon / Supabase。
⚠️ 踩坑 4 —
*.workers.dev 子域在部分地区「可达性不稳定」。免费部署的默认域名,个别网络环境访问慢甚至不通。对策:把自有域名(已解析到 Cloudflare)绑定到 Worker / 路由,走自家域名更稳更可控。⚠️ 踩坑 5 — 子请求上限 50 次 / 请求。免费层每个请求内部最多发 50 次 subrequest(fetch 调用),超了直接报错。对策:合并外部调用、加缓存、减少瀑布式 fetch;需要更多用付费计划(最高 1000)。
⚠️ 踩坑 6 — 别依赖「内存常驻」做跨请求状态。Worker 是事件驱动、实例可能随时复用也可能随时销毁,
globalThis 缓存只是「尽力复用」而非保证。对策:跨请求状态一律放 KV / R2 / Cache API;内存只当临时缓存。⚠️ 踩坑 7 — 免费层实时日志 / 调试能力有限。生产排错想看
wrangler tail 实时日志在免费层受限。对策:上线前本地 wrangler dev 充分测;关键路径打结构化日志,异常主动抛错便于追溯。💡 组合拳终极版:Workers(边缘函数) + R2(大文件 / 图片,免流量费) + Pages(静态前端) + KV(边缘缓存) + Neon(按需唤醒的 PG) = 几乎零成本、全球可达的全栈小产品底座,且 Workers / R2 / Pages / KV 免费层均无需绑卡。本站的教程矩阵正是教您把它拼起来赚钱。
六、什么时候该付费
出现任一信号说明免费层到顶:每天请求超 10 万、单请求需要 >10ms CPU、要 Durable Objects / Queue / Workflows 这类高级绑定、要更高 SLA 或更多子请求。Cloudflare 付费按 请求量 + CPU 时长 计费,升级不中断服务,平滑过渡。