提供案例
billflare.

Cloudflare 上的 OpenNext:缓存命中带出 787 万次 R2 读取,预取死循环带出 1000 万次 Worker 请求

Meathill 排查 Workers 上一个 Next.js 16 站点接连出现的两次费用尖峰:RegionalCache 每次命中都在后台读 R2,随后 OpenNext 缓存拦截引发 _rsc 预取死循环;文中给出止住每一处的配置改动。

适用产品
WorkersR2
来源
作者经验Meathill 的博客
作者
Meathill(@meathill1)

要点

  • 日访客约 2,300 时,R2 显示 A 类操作 1.9 万次、B 类 787 万次。作者把超过 400:1 的比值解读为发生在缓存命中而非未命中时的读取,并发现 B 类曲线与 Zone 请求几乎重合。
  • 原因:Next.js 16 下 OpenNext 的 withRegionalCache 默认 shouldLazilyUpdateOnCacheHit 为 true,每次命中都通过 waitUntil 在后台读一次 R2;过短的 s-maxage(首页 600 秒、内页 1,800 秒)叠加数百个各自回源的 PoP 进一步放大。
  • R2 侧处理:shouldLazilyUpdateOnCacheHit 设为 false;增量缓存独立成单独的桶,并用生命周期规则让 incremental-cache/ 前缀 7 天后过期;图片尺寸减到 5 组;s-maxage 与 revalidate 提到 86,400 秒。
  • 两天后 Worker 请求突破 1000 万次,Observability 用量也爆了。他把无限 _rsc 预取追到 enableCacheInterception: true(opennextjs-cloudflare 第 1348 号 issue),关闭后又在 35 个组件的低意图链接上加 prefetch={false},首屏静默预取减少七成以上。
  • 官方文档(2026-10-14 复核):GetObject、HeadObject 属 R2 B 类操作;生命周期规则通常在到期后 24 小时内删除对象,删除后不再计费;Workers Paid 每月含 1000 万次请求,超出每百万 0.30 美元。

原始来源

  1. 发布

    Cloudflare 上的 OpenNext:缓存命中带出 787 万次 R2 读取,预取死循环带出 1000 万次 Worker 请求

    打开原始来源

    Meathill 排查 Workers 上一个 Next.js 16 站点接连出现的两次费用尖峰:RegionalCache 每次命中都在后台读 R2,随后 OpenNext 缓存拦截引发 _rsc 预取死循环;文中给出止住每一处的配置改动。

  2. 排查当时的帖子:R2 B 类读取暴涨,作者正在找原因。

    到 𝕏 阅读

    Meathill

    @meathill1 · 𝕏 原帖

    艹,next.js 真的有 bug,16.3.x 之后,会死循环 prefetch,昨天的流量直接就把我的 Worker 额度全线打爆了…… https://t.co/NS8PjNxk9T
  3. 作者在 𝕏 分享 R2 读取与 Worker 请求两次事故的复盘文章。

    到 𝕏 阅读

    Meathill

    @meathill1 · 𝕏 原帖

    https://t.co/jDUdD5pUz6 好久没写博客,最近踩一大坑,写出来给大家当前车之鉴。前几天关于AMD免费AI API的文章侥幸成为爆款,把https://t.co/CZZ6zVzqV0网站不够扎实的基础暴露的一塌糊涂。因为缓存设置不当加上中招next.js无限循环prefetch的bug,所有Worker额度均被打爆。希望对大家有帮助。
  4. 后续:免费 A 类额度用完后,放在 R2 上的 ISR 缓存比 Worker 本身还贵。

    到 𝕏 阅读

    Meathill

    @meathill1 · 𝕏 原帖

    完蛋,上次的 bug 把这个月的 A 类操作额度也用完了,结果现在 ISR 页面缓存的价格反而比 worker 更贵……今天只好停掉 ISR 试试看,如果明天成本能降下来,以后低访问量的网页就不走 ISR 缓存了。
作者经验Workers +5

别让小项目跑出大账单:Cloudflare 的四层费用防护

David Z(@davezfr)在 X 长文中面向 Vibe Coder,整理预算提醒、付费路径停止条件、自动暂停,以及由 personal agent 核实并暂停的四层防护。

D1

Yan Zhu(picturepan2):D1 行读取暴增带来约 $400 账单。

Yan Zhu(@picturepan2)称上个月也遭遇约 $400 的 Cloudflare 账单,因 D1 数据库 row reads 爆量。他引用 shmily7 的 Durable Objects 串文作对照,未报告退款或支持结果。

官方说明账号级用量计费产品

预算预警

Cloudflare 官方说明账号级费用预警及其通知边界。