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

NextJS SST静态页面缓存异常:为何始终显示CloudFront缓存未命中?

SST部署NextJS静态页面仍触发SSR Lambda的原因及解决方案

核心结论

SST完全支持静态站点生成(SSG),你的页面未被正确托管为静态资源的原因是NextjsSite构造的默认配置会将所有请求路由到SSR Lambda,即便页面是编译时生成的静态文件。

问题原因

SST的NextjsSite默认采用Next.js Serverless部署模式,该模式下CloudFront的缓存行为被设置为将所有请求转发给Lambda函数处理,而非直接从S3读取已生成的静态HTML文件。因此即使你的页面是纯静态的,每次请求仍会触发SSR Lambda,导致CloudFront始终返回Miss from CloudFront。

解决方案

修改栈代码,开启staticSite配置,让CloudFront直接从S3读取静态资源并缓存:

import { SSTConfig } from "sst";
import { NextjsSite } from "sst/constructs";

export default {
  config(_input) {
    return {
      name: "test-next",
      region: "sa-east-1",
    };
  },
  stacks(app) {
    app.stack(function Site({ stack }) {
      const site = new NextjsSite(stack, "site", {
        staticSite: {
          // 配置静态资源的CloudFront缓存策略
          cachePolicy: {
            defaultTTL: 86400, // 默认缓存1天
            maxTTL: 31536000, // 最大缓存1年
            minTTL: 0,
          },
        },
      });

      stack.addOutputs({
        SiteUrl: site.url,
      });
    });
  },
} satisfies SSTConfig;

效果验证

部署修改后的栈后:

  • 首次访问页面时CloudFront返回Miss from CloudFront(需要先拉取资源缓存)
  • 后续访问会返回Hit from CloudFront,且SSR Lambda日志组不再有调用记录

补充说明

SST支持SSG、ISR(增量静态再生)和SSR多种渲染模式,只需根据页面类型调整NextjsSite的对应配置即可。

内容的提问来源于stack exchange,提问作者Vitor Figueredo Marques

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:35:02