When we talk about middleware in this docs, we are referring both to the next middleware as well as the
whole routing layer of next. For example, next.config.js headers, redirects, rewrites, etc. are all
considered routing in this context.
Since V3, you can decide to move the middleware outside of the server into it's own function that you can place in front of your others backend functions.
By default, the middleware is inside the server, but you can move it outside by setting middleware.external to true in your open-next.config.ts file.
{
middleware: {
external: true;
}
}It uses the aws-lambda wrapper and the aws-cloudfront converter by default so that you can use it with AWS Lambda@edge and Cloudfront.
You can also use it inside Cloudflare Workers by setting the wrapper to cloudflare and the converter to edge.
Special overrides
Origin resolver
Since your app could be split into different origins, you need to be able to retrieve the right origin for the request. That's the purpose of the originResolver function.
By default, it uses the pattern-env resolver which uses an OPEN_NEXT_ORIGIN environment variable to resolve the origin as well as the pattern defined in your open-next.config.ts. This env var should be a stringified version of an object of this shape:
{
// Key should be the same as the one used in `open-next.config.ts` for the functions
[origin: string]: {
host: string;
protocol: "http" | "https";
port?: number;
customHeaders?: Record<string, string>;
}
}You can of course override this behavior by providing your own originResolver function in your open-next.config.ts file.
This is the type of the originResolver function:
type OriginResolver = BaseOverride & {
resolve: (path: string) => Promise<Origin | false>;
};