diff --git a/packages/next/server/config-schema.ts b/packages/next/server/config-schema.ts index 3cf35582ee5e..1ed39ed3c9e6 100644 --- a/packages/next/server/config-schema.ts +++ b/packages/next/server/config-schema.ts @@ -320,6 +320,10 @@ const configSchema = { profiling: { type: 'boolean', }, + proxyTimeout: { + minimum: 0, + type: 'number', + }, runtime: { // automatic typing doesn't like enum enum: ['experimental-edge', 'nodejs'] as any, diff --git a/packages/next/server/config-shared.ts b/packages/next/server/config-shared.ts index 61d92edc6bd0..b0bf627bfb9d 100644 --- a/packages/next/server/config-shared.ts +++ b/packages/next/server/config-shared.ts @@ -90,6 +90,7 @@ export interface ExperimentalConfig { cpus?: number sharedPool?: boolean profiling?: boolean + proxyTimeout?: number isrFlushToDisk?: boolean workerThreads?: boolean pageEnv?: boolean @@ -550,6 +551,7 @@ export const defaultConfig: NextConfig = { isrFlushToDisk: true, workerThreads: false, pageEnv: false, + proxyTimeout: undefined, optimizeCss: false, nextScriptWorkers: false, scrollRestoration: false, diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index d762c1a05388..7084d982f18a 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -697,7 +697,10 @@ export default class NextNodeServer extends BaseServer { ws: true, // we limit proxy requests to 30s by default, in development // we don't time out WebSocket requests to allow proxying - proxyTimeout: upgradeHead && this.renderOpts.dev ? undefined : 30_000, + proxyTimeout: + upgradeHead && this.renderOpts.dev + ? undefined + : this.nextConfig.experimental.proxyTimeout || 30_000, }) await new Promise((proxyResolve, proxyReject) => {