AWS
主要组件
中间件
⚠️

本文档中提到的 middleware(中间件)既指 Next.js 的 middleware 功能,也包含整个 Next.js 的 routing(路由)层。例如,next.config.js 中的 headers、redirects、rewrites 等在此上下文中都被视为 routing 的一部分。

从 V3 版本开始,您可以选择将中间件从服务器中移出,作为一个独立函数放置在其它后端函数之前。

默认情况下,中间件位于服务器内部,但您可以通过在 open-next.config.ts 文件中设置 middleware.externaltrue 将其移出:

{
  middleware: {
    external: true;
  }
}

默认使用 aws-lambda 包装器和 aws-cloudfront 转换器,以便与 AWS Lambda@edge 和 Cloudfront 配合使用。 您也可以通过将包装器设置为 cloudflare 和转换器设置为 edge 来在 Cloudflare Workers 中使用。

特殊覆盖配置

源解析器

由于您的应用可能被拆分到不同的源(origin),因此需要能够为请求检索正确的源。这就是 originResolver 函数的作用。

默认情况下,它使用 pattern-env 解析器,该解析器使用 OPEN_NEXT_ORIGIN 环境变量以及 open-next.config.ts 中定义的模式来解析源。该环境变量应该是以下形状对象的字符串化版本:

{
  // 键名应与 `open-next.config.ts` 中为函数使用的键名相同
    host: string;
    protocol: "http" | "https";
    port?: number;
    customHeaders?: Record<string, string>;
  }
}

当然,您可以通过在 open-next.config.ts 文件中提供自定义的 originResolver 函数来覆盖此行为。 以下是 originResolver 函数的类型定义:

type OriginResolver = BaseOverride & {
  resolve: (path: string) => Promise<Origin | false>;
};