AWS Amplify部署Next.js应用ISR规则失效 页面每30秒重生成问题咨询
ISR重验证间隔异常问题排查方案
AWS Amplify 侧配置问题
- 默认缓存规则覆盖ISR配置:Amplify托管Next.js应用时,默认对动态生成资源设置的Cache-Control头仅为30秒,优先级高于Next.js输出的ISR重验证配置。你可以在Amplify控制台的「Rewrites and redirects」模块或者自定义
amplify.yml文件中检查响应头配置,确认是否存在强制短缓存的规则。 - 实例自动回收触发冷启动重生成:如果你的Amplify实例最小实例数配置为0,实例闲置超过30秒后会被回收,下一次请求触发冷启动时会直接重新生成ISR页面,不会复用现有缓存。你可以在Amplify「Build settings」中调整运行时配置,将最小实例数设置为1,避免频繁冷启动导致的页面重复生成。
- 频繁部署清空ISR缓存:如果你的仓库开启了自动构建或者多分支预览部署,每次新部署都会清空所有已有ISR缓存,部署后首次访问页面就会重新生成,若部署频率接近30秒也会出现该现象,你可以先排查近期部署记录排除该场景。
Next.js 侧构建设置问题
- revalidate属性未正确赋值:检查对应ISR页面
getStaticProps返回的revalidate值是否确实为86400,确认相关环境变量是否在构建阶段正确注入,避免出现revalidate被误赋值为0或30的情况。你可以本地执行生产构建后查看.next/server/pages/目录下对应页面的配置,确认重验证时间是否正确写入。 - 渲染错误触发重试机制:如果ISR页面生成时抛出未捕获的异常,Next.js会默认启用30秒间隔的重试生成逻辑,直到页面渲染成功为止。你可以查看Amplify的运行时日志,确认是否存在页面渲染报错,优先修复业务代码问题。
- 边缘运行时兼容问题:如果你在页面级别指定了
runtime = 'edge',AWS Amplify对Next.js边缘运行时的ISR支持存在已知缺陷,会忽略自定义的revalidate值,默认使用30秒的重验证间隔,你可以先切回Node.js运行时验证是否恢复正常。
问题定位方法
你可以本地执行next build && next start启动生产环境服务,请求对应ISR页面后查看响应头的x-nextjs-cache值和Cache-Control值,如果本地运行时重验证时间符合预期,即可确定问题出在Amplify托管配置侧;如果本地也存在30秒重生成的问题,优先排查Next.js的代码和构建设置。
内容的提问来源于stack exchange,提问作者Himanshu Chandra
相关产品推荐
相关产品推荐

