每日签到奶昔超市点数市场奶昔访达
返回列表 发布新帖
查看: 69|回复: 0

[开发] 【技术交流】基于 Cloudflare Workers 的轻量级 API 网关实践分享

发表于 前天 23:36 | 查看全部 |阅读模式

欢迎注册论坛,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
最近在折腾 Cloudflare Workers 做边缘计算相关的东西,顺便把自己踩过的坑和一些实践经验简单整理一下,希望对有兴趣的同学有帮助。如果有更好的优化方案也欢迎一起讨论。

📌 1. 背景

为了降低业务延迟、减少服务器压力,同时让 API 更好地分发到全球节点,我尝试用 Cloudflare Workers + KV 的方式做一个轻量级 API 网关。目标主要包括:

请求分流

接口鉴权(基于 JWT)

简单限流

基础日志记录

边缘缓存静态资源

⚙️ 2. 架构说明

整体架构相当简单:

Client → Cloudflare Edge → Worker → 后端服务(可选)


Worker 负责做:

Token 校验

IP 过滤

速率限制(基于 Durable Objects 或 R2)

返回 JSON 或 HTML

如果是简单接口,也可以完全在边缘处理,不走后端。

🔐 3. 鉴权设计

我使用了 JWT 做鉴权,Workers 原生就能跑 crypto,这点很方便。

const token = request.headers.get("Authorization")?.replace("Bearer ", "");

if (!token || !verifyJWT(token, env.JWT_SECRET)) {
  return new Response(JSON.stringify({ error: "Unauthorized" }), {
    status: 401,
  });
}


另外还加了 IP 白名单(支持 cf-connecting-ip):

const ip = request.headers.get('cf-connecting-ip') || '0.0.0.0';
if (!ALLOWED_IPS.includes(ip)) {
  return new Response("Forbidden", { status: 403 });
}

🚀 4. 速率限制

如果你不想用 Cloudflare 的 Enterprise 限流,可以自己做一个超轻量版,用 KV 即可。

示例(每 IP 每分钟最多 30 次):

const key = `rate:${ip}:${minute}`;

let count = await env.KV.get(key);
count = count ? parseInt(count) : 0;

if (count > 30) {
  return new Response("Too Many Requests", { status: 429 });
}

await env.KV.put(key, count + 1, { expirationTtl: 60 });


对普通场景来说已经够用。

📊 5. 日志系统(可选)

我自己写了一个简单的日志结构,主要记录成功/失败请求、来源 IP、处理时间等,方便后期做分析。

可以写入:

R2

Workers Analytics

甚至是一个简单的 HTTP 日志上报接口

🧪 6. 一些踩坑

Workers dev 本地和线上环境行为 有时不一致,尤其是 Headers、CF properties

KV 读写操作有延迟,不适合做强一致状态

不建议在 Worker 内部做超长逻辑,否则 TTFB 会明显变慢

建议开启 Cache API,尤其是静态 JSON 或 HTML

📘 7. 总结

Cloudflare Workers 非常适合做轻量 API 网关或边缘逻辑处理,可以显著降低后端负载。不过如果你的业务需要强一致性、高持久、复杂事务,Workers 并不能完全替代传统服务端。

如果大家有类似项目,也欢迎一起讨论配置、架构和优化方案。
爱生活,爱奶昔~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2025 Nyarime 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表