Cloudflare 免费额度告急?Nuxt 项目优化与防爬实战攻略
说实话,Cloudflare Workers/Pages 的免费额度确实香,但对于动辄成千上万个页面的项目来说,那每天 10 万次的请求额度有时候真的不够看。
最近有个朋友在搞一个世界时区查询工具(名字叫“几点钟”),用的是 Nuxt 部署在 Cloudflare 上。一开始觉得挺好,静态页嘛,速度快。结果没两个月,后台一看,免费额度直接亮红灯,流量全是“爬虫”贡献的。
如果你也遇到了这种情况,别急着掏钱升级,咱们先看看能不能用技术手段把这个“漏洞”补上。这里整理了一套从防御到优化的实战攻略。
一、 扒皮元凶:为什么额度掉得这么快?
从监控反馈来看,问题主要集中在两点:页面数量过多和恶意爬虫攻击。
- 页面数量爆炸:像世界时区这种项目,收录了全球大量城市,每一个城市可能对应多个时间维度的页面。只要收录一多,静态渲染后的页面数量直线上升。即使没人访问,搜索引擎和恶意爬虫也会顺着链接把这些页面全爬一遍,请求次数自然暴涨。
- Cloudflare 成了“靶场”:不知道大家有没有同感,把域名挂在 Cloudflare 下,就像把名字写在攻击榜上。各种七七八八的扫描器、脚本小子无休止地扫你的 IP 和接口。而且现在的攻击者很鸡贼,User-Agent 伪装得跟正规浏览器一模一样,普通规则根本拦不住,Cloudflare 简直成了个“养蛊”的培养皿。
配置 WAF 规则和封禁特定地区的安全设置示例
二、 构筑防线:WAF 规则与机器人管理
既然知道了是爬虫在作祟,第一要务就是得把它们拦在门外,别让它们消耗你的 Worker CPU 和请求次数。
1. 不仅仅是简单的安全规则 很多人只会开启 Cloudflare 默认的“安全级别”,这远远不够。你需要手动编写 WAF(Web 应用防火墙)规则。
设置机器人管理验证模式与人机验证配置
- 拦截无特征的 User-Agent:虽然现在 UA 能伪造,但大部分低级扫描器还是会有破绽。你可以尝试构建一条规则,拦截常见扫描工具的特征,或者反过来——只允许主流浏览器的 UA(记得加上 Googlebot、Bingbot 这类搜索引擎,否则网站就搜不到了)。
- 封禁特定国家/地区:如果你的项目(比如这个时区工具)主要服务中文用户,那么来自某些异常流量高发的地区的访问可以直接封禁。这在后台的“安全”->“设置”里很容易配置。
2. 细粒度配置“机器人管理模式” Cloudflare 的机器人管理功能非常强大,但默认可能开得不够彻底。
- 开启“机器人攻击模式”,或者手动调整“超级机器人”的检测到“积极”或“严格”模式。
- 对于验证码,建议开启 Turnstile(免费版也支持)。对于疑似机器人的请求,强推人机验证,能挡掉一大波脚本。
三、 性能调优:把成本降到最低
拦住了坏人,接下来就是优化自己的架构,让真实用户的访问尽量少消耗请求额度。
1. 缓存就是命根子 对于 Nuxt 这种静态生成的站点,HTML 内容是不变的。一定要确保 Cloudflare 的缓存规则设置得当。
- 缓存级别:设置为“标准”,确保 HTML 页面本身能被边缘节点缓存。
- TTL 设置:既然是静态内容,缓存时间尽量拉长,比如设置 1 天甚至 1 个月。这样只要边缘节点命中了缓存,就不会回源到你的 Worker/Server,这算不算一次请求视具体计费逻辑而定,但能极大减轻服务器压力。
- 浏览器缓存:在响应头里加上长久的
Cache-Control,让用户本地浏览器也缓存资源。
2. 优化 Nuxt 的渲染策略 虽然现在是 2026 年,SSR(服务端渲染)依然流行,但对于这种以展示为主的信息类站点,静态生成(SSG) 依然是性价比之王。
- 确保你的 Nuxt 项目使用的是
nuxi generate或者开启了ssr: true但配合静态导出模式,尽量让内容在构建时就生成好,而不是每次请求都去 Worker 里跑一遍 JS 渲染。 - 如果实在需要 SSR,检查页面有没有不必要的 API 请求,尤其是那些频繁轮询的接口,最好改成长轮询或者 WebSocket。
3. 图片和资源托管 如果你还在用 Worker 输出图片,或者带宽占比较高,记得用 Cloudflare Images 或者直接把资源扔到 R2 对象存储里。把带宽和算力任务从 Worker 计算额度里剥离出来。
四、 另辟蹊径:隐藏真实接口
有时候,攻击者是盯着 API 或者特定的 Admin 路径来的。这就需要一点“伪装”技巧。
不要直接使用 api.yourdomain.com 这样一眼就能看穿的子域名,或者把后端接口藏在 /static/data/ 这类看起来像静态资源的路径下。虽然这不是长久的解决办法,但在自动化脚本横行的年代,稍微增加一点对方的探测成本,也能过滤掉那部分“懒得写复杂逻辑”的攻击者。
写在最后
当免费额度不够用时,不要恐慌。大部分情况都是那 20% 的无效流量(甚至恶意流量)消耗了 80% 的资源。先上 WAF,再调缓存,最后才是考虑升级套餐。毕竟,咱们做独立开发的,每一分预算都得花在刀刃上。

评论已关闭