Next.js 图片在 Cloudflare 上为什么变贵:改走 /cdn-cgi/image 并让它进缓存
Meathill 解释 OpenNext 上默认 /_next/image 端点为何无法缓存、每次请求都重算,并改用自定义 loader 走 Cloudflare 图片转换,再配一条长缓存规则。
- 适用产品
- WorkersImages
- 来源
- 作者经验Meathill 的博客
- 作者
- Meathill(@meathill1)
要点
- 作者发现 /_next/image 响应没有 Cache-Control、cf-cache-status、ETag 或 Last-Modified,浏览器和 CDN 都会反复请求,每张图都打到 Worker;用 Cache Rules 覆写也不生效。
- 按 OpenNext 文档的做法:写一个 image-loader.ts 自定义 loader,输出 /cdn-cgi/image/<参数>/<原图>,在 next.config 中设为 loader: "custom"。之后响应头出现 unique_transformations_billing: true,并遵从缓存规则。
- 随后他为图片路径加一条缓存规则,把边缘和浏览器 TTL 都强制为一年;并提醒边缘缓存按 LRU 淘汰,冷门图片仍可能被挤掉;若完全不能接受重算,可考虑 Cache Reserve。
- 官方文档(2026-10-14 复核):Images 的唯一转换每个自然月只计一次;Free 含 5,000 次,超出后新转换返回 9422 错误且不收费;Paid 含 5,000 次,之后每 1,000 次 0.50 美元。Cache Reserve 需付费方案,按存储量和 A/B 类操作计费。
原始来源
发布
Next.js 图片在 Cloudflare 上为什么变贵:改走 /cdn-cgi/image 并让它进缓存
打开原始来源Meathill 解释 OpenNext 上默认 /_next/image 端点为何无法缓存、每次请求都重算,并改用自定义 loader 走 Cloudflare 图片转换,再配一条长缓存规则。
作者在 𝕏 分享这篇图片费用文章。
到 𝕏 阅读Meathill
@meathill1 · 𝕏 原帖
Next.js <Image> 很好用,但在 Cloudflare Worker + OpenNext,默认图片优化可能悄悄变成“钱包黑洞”。 我帮朋友排查了一次每月近 $100 的账单,最后发现问题藏在 HTTP Header 里。 这篇文章记录了完整排查过程,以及如何用 Cloudflare 原生 Image Resizing + custom loader + 缓存规则,把成本优化下来,把性能提升上去。 https://t.co/3ULkkPFYl0
其他推荐阅读
社区资源Workers +3
Cloudflare Recognizer 用量告警工具
一个开源的 Workers + KV 工具:按 Cron 轮询 Cloudflare 分析数据,按自定义账期对照合同承诺量跟踪用量,并在突增时告警,主要面向 Enterprise 账号。
Workers
王小克:投票页每 3 秒轮询,千刀账单后补充用量明细。
@keking99 最初报告投票页每 3 秒轮询 /api/result 产生约 $1,000 费用。后称截至 10 月 4 日累计用量费为 $816.52,并另提截图合计 $817.14。他后称工单一直被拒。
作者经验Durable Objects +1
没人访问也能烧钱:先查闲置项目的后台任务与存储读写
@An_yhl 看完 @shmily7 的后续,决定翻查试完就扔的 AI 项目:先查后台定时任务与存储读写,不用的停掉而不只是关网页;账单提醒要开,但提醒不会替你停机。