⚠️
本文档中提到的 middleware(中间件)既指 Next.js 的 middleware 功能,也包含整个 Next.js 的 routing(路由)层。例如,next.config.js 中的 headers、redirects、rewrites 等在此上下文中都被视为 routing 的一部分。
从 V3 版本开始,您可以选择将中间件从服务器中移出,作为一个独立函数放置在其它后端函数之前。
默认情况下,中间件位于服务器内部,但您可以通过在 open-next.config.ts 文件中设置 middleware.external 为 true 将其移出:
{
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>;
};