You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js生产环境服务端页面被缓存,如何排查并禁用该缓存?

排查步骤
  • 检查数据获取逻辑的作用域问题
    你遇到的生产环境缓存、dev环境正常的典型诱因之一,是把请求实例、查询结果定义在了页面组件的顶级作用域。Node.js 生产环境下顶级作用域变量为进程全局共享,第一次请求赋值后所有后续请求都会复用该结果,dev模式由于热重载会定期重置模块,因此不会触发该问题。请检查getServerSideProps/getInitialProps外是否有全局缓存的graphql请求、客户端实例。
  • 排查请求缓存配置
    如果你使用的是Next.js 13及以上版本,内置fetch方法生产环境默认开启强制缓存,需要手动给请求添加cache: 'no-store'或者next: { revalidate: 0 }配置禁用缓存。如果使用Apollo、urql等graphql客户端,需确认服务端渲染时是否开启了内存缓存,且没有每次请求重置客户端实例,全局单例的客户端会复用第一次的查询结果,不会触发新请求。
  • 验证接口响应头
    直接用curl访问你服务的3000端口/api/graphql接口,查看返回的响应头中是否存在Cache-Control、ETag等缓存相关配置,若有类似max-age=xxx、public的配置,需要在接口返回时显式设置Cache-Control: no-store, no-cache, must-revalidate禁用缓存。
  • 加日志定位问题层级
    分别在页面的getServerSideProps入口、/api/graphql接口入口添加console.log日志,生产环境访问页面时查看日志输出:
    • 如果getServerSideProps的日志没有打印,说明Next.js层面缓存了整个页面的渲染结果,可以在getServerSideProps中通过响应对象设置res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate')强制禁用页面缓存
    • 如果getServerSideProps日志打印了但/api/graphql的日志没打印,说明是数据请求链路的缓存问题,重点检查graphql客户端、请求方法的缓存配置
  • 检查是否意外开启ISR
    确认动态路由页面的getStaticProps中是否配置了revalidate参数,虽然你构建输出中动态页面标记为λ服务端渲染,但配置不当也可能触发增量静态再生导致内容缓存。

内容的提问来源于stack exchange,提问作者Zied Hamdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:45:05