Cloudflare Workers 入门:零成本搭建你的第一个 Serverless 应用

zheng头像
zheng 2026-07-18 09:55
楼主

Cloudflare Workers 入门:零成本搭建你的第一个 Serverless 应用

你有了一台 VPS,在上面跑了 Nginx、MySQL、几个网站,偶尔还要重启一下因为内存炸了。然后你听说"Serverless 不用管服务器",但 AWS Lambda 那套 IAM 权限差点把你送走。你只是想写几行 JS 做个 API,能不能别那么重?能。Cloudflare Workers 免费额度一天 10 万次请求,零服务器、零运维,代码 push 上去就跑。


Workers 到底是什么

一句话:把 JavaScript 跑在 Cloudflare 全球 300+ 边缘节点上。用户请求过来,就近的节点执行你的代码然后返回结果,全球延迟 50ms 以内。

对比一下你已有的方案:

方案 部署位置 延迟 成本 运维
VPS + Nginx 单机房 看机房位置 月付几十 要管
Cloudflare Pages 全球边缘 免费
Cloudflare Workers 全球边缘 极低 免费 10万次/天

Pages 适合静态网站,Workers 适合动态逻辑——API、A/B 测试、请求改写、简易后端,这些 Pages 做不了。


环境准备

你需要一个 Cloudflare 账号和一个 Node.js 环境。用 npm 装 wrangler(Cloudflare 官方 CLI):

npm install -g wrangler

登录授权:

wrangler login

浏览器弹窗确认后,你的终端就能直接操作用 Cloudflare 账号下的 Workers 了。


第一个 Worker:IP 归属地查询

创建一个项目:

mkdir geo-api && cd geo-api
wrangler init geo-api

编辑 src/index.js

export default {
  async fetch(request) {
    // Cloudflare 自动注入 request.cf 对象,包含请求的地理信息
    const { country, city, region, timezone, colo } = request.cf;

    return new Response(JSON.stringify({
      ip: request.headers.get('cf-connecting-ip'),
      country: country || '未知',
      city: city || '未知',
      region: region || '未知',
      timezone: timezone || '未知',
      colo: colo || '未知',  // 处理请求的边缘节点
    }, null, 2), {
      headers: { 'content-type': 'application/json;charset=UTF-8' },
    });
  },
};

request.cf 是 Cloudflare 免费送的数据,不需要调用任何第三方 API。部署:

wrangler deploy

10 秒后访问 https://geo-api.你的子域名.workers.dev,返回:

{
  "ip": "123.45.67.89",
  "country": "CN",
  "city": "Shanghai",
  "region": "Shanghai",
  "timezone": "Asia/Shanghai",
  "colo": "SHA"
}

这就是一个零成本、全球低延迟的 IP 查询 API。你不需要买服务器、装 Nginx、配 SSL——Cloudflare 全包了。


实用场景二:为你的博客做 A/B 测试

假设你想测试两种不同的导航栏样式,Worker 可以按 50% 概率分流:

export default {
  async fetch(request) {
    // 根据 cookie 或随机数决定走哪个版本
    const cookie = request.headers.get('cookie') || '';
    let variant;

    if (cookie.includes('variant=b')) {
      variant = 'b';
    } else if (cookie.includes('variant=a')) {
      variant = 'a';
    } else {
      variant = Math.random() < 0.5 ? 'a' : 'b';
    }

    const url = new URL(request.url);
    // 转发到不同的 A/B 页面(可以是两个 Pages 部署或两个路径)
    url.pathname = variant === 'a' ? '/index-a.html' : '/index-b.html';

    const response = await fetch(url.toString());
    const newResponse = new Response(response.body, response);

    // 写入 cookie 保证同一用户看到一致版本
    newResponse.headers.set('set-cookie', `variant=${variant}; path=/; max-age=86400`);

    return newResponse;
  },
};

不用装 Nginx split_clients 模块,不用改 DNS,几行 JS 搞定。


实用场景三:短链接跳转

你之前写过自建短链接服务(用 PHP + MySQL),用 Workers + KV 可以更轻:

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const slug = url.pathname.slice(1);  // 去掉开头的 /

    if (!slug) {
      return new Response('短链接服务', { status: 200 });
    }

    // 从 KV 存储查原始链接
    const target = await env.LINKS.get(slug);

    if (target) {
      return Response.redirect(target, 301);
    }

    return new Response('404 Not Found', { status: 404 });
  },
};

配一个 KV 命名空间:

wrangler kv:namespace create LINKS

然后在 wrangler.toml 绑定:

kv_namespaces = [
  { binding = "LINKS", id = "你的KV_ID" }
]

写入短链:

wrangler kv:key put --binding=LINKS "gh" "https://github.com/zjunwei"

这方案的优势:全球 301 跳转延迟极低,没有数据库,没有 PHP,KV 免费额度每天百万次读写。


Workers 的边界:什么能做,什么不能做

能做 不能做 / 不适合
API 代理与聚合 WebSocket 长连接(有 30 秒超时)
HTML Rewrite / A/B 测试 大文件上传下载(单次 100MB 限制)
请求鉴权 / 防火墙逻辑 复杂数据库操作(无 SQL)
简单的 KV 存储读写 CPU 密集型计算(单请求 30 秒 wall time)
定时任务(Cron Triggers) 需要保持长连接的服务

对于博客场景——短链跳转、A/B 测试、API 聚合、评论反垃圾过滤、图片水印实时处理——Workers 完全够用,而且是免费的。


一个月能省下什么

假设你现在有一台 5 美元/月的 VPS 专门跑几个轻量 API:

项目 VPS 方案 Workers 方案
IP 归属 API 装 Nginx + Python Flask 一个 Worker,0 元
短链接跳转 PHP + MySQL Workers + KV,0 元
博客访客统计 自建 Umami Worker + KV 计数器,0 元
SSL 证书 Let's Encrypt 自动续 Cloudflare 自带
服务器监控 Uptime Kuma 不需要,Workers 永不宕机

把轻量 API 迁到 Workers,VPS 只跑 WordPress 和数据库,负载降一半,说不定还能降配省钱。


Q&A

Q:Workers 和 Cloudflare Pages Functions 有什么区别?

Pages Functions 本质是 Workers 的封装,放在 Pages 项目目录里自动部署。如果你已经有 Cloudflare Pages 网站,加一个 functions/ 目录就行,不用单独建 Worker 项目。纯 API 场景用 Workers 更干净。

Q:免费额度够用吗?

每天 10 万次请求,KV 每天百万次读写。大多数个人博客一天几百到几千 PV,完全用不完。超出后按 $0.30/百万次计费,也比 VPS 便宜。

Q:Workers 能连数据库吗?

不能直连 MySQL/PostgreSQL,但可以用 Cloudflare D1(Serverless SQLite,原生兼容)或者通过 HTTP API 代理连外部数据库。小规模数据直接用 KV 就够了。

Q:部署后怎么绑定自己的域名?

在 Cloudflare 控制台 Workers 页面 → Triggers → Custom Domains,添加你的域名路由,比如 api.zjunwei.com/*。前提是域名已接入 Cloudflare DNS。


一次部署,全球生效。不写 nginx.conf,不看 syslog,没有半夜的 "Disk Full" 告警。这就是 Workers ——免费的东西,做到好用才是真本事。 (内容由AI生成,仅供参考)

域名从 Cloudflare 迁移到阿里云完整指南:零中断切换 Cloudflare R2 对象存储:零成本搭建博客图床,告别图片拖慢网站

最新回复

暂无回复,来说两句吧

发表评论

站点总访问量:6160