コンテンツにスキップ
Configurationnext.config.js Optionsexperimental.proxyClientMaxBodySize

experimental.proxyClientMaxBodySize

プロキシが使用される場合、Next.js はリクエストボディを自動的にクローンし、メモリにバッファリングして、プロキシと基盤となるルートハンドラーの両方で複数回読み込めるようにします。過剰なメモリ使用を避けるため、この設定オプションはバッファリングされるボディのサイズ制限を設定します。

デフォルトでは、最大ボディサイズは 10MB です。リクエストボディがこの制限を超えた場合、ボディは制限までしかバッファリングされず、どのルートが制限を超えたかを示す警告がログに記録されます。

オプション

人間が読める文字列形式でサイズを指定します。

next.config.ts
import type { NextConfig } from 'next'
 
const nextConfig: NextConfig = {
  experimental: {
    proxyClientMaxBodySize: '1mb',
  },
}
 
export default nextConfig

サポートされている単位:bkbmbgb

数値形式

または、バイト単位で数値を指定します。

next.config.ts
import type { NextConfig } from 'next'
 
const nextConfig: NextConfig = {
  experimental: {
    proxyClientMaxBodySize: 1048576, // 1MB in bytes
  },
}
 
export default nextConfig

動作

リクエストボディが設定された制限を超えた場合

  1. Next.js は最初の N バイト(制限まで)のみをバッファリングします。
  2. 制限を超えたルートを示す警告がコンソールにログ記録されます。
  3. リクエストは通常どおり処理を続行しますが、部分的なボディのみが利用可能になります。
  4. リクエストは失敗したり、クライアントにエラーを返したりしません

アプリケーションで完全なリクエストボディを処理する必要がある場合は、以下のいずれかを行う必要があります。

  • proxyClientMaxBodySize 制限を増やす
  • アプリケーションロジックで部分的なボディを適切に処理する

proxy.ts
import { NextRequest, NextResponse } from 'next/server'
 
export async function proxy(request: NextRequest) {
  // Next.js automatically buffers the body with the configured size limit
  // You can read the body in proxy...
  const body = await request.text()
 
  // If the body exceeded the limit, only partial data will be available
  console.log('Body size:', body.length)
 
  return NextResponse.next()
}
app/api/upload/route.ts
import { NextRequest, NextResponse } from 'next/server'
 
export async function POST(request: NextRequest) {
  // ...and the body is still available in your route handler
  const body = await request.text()
 
  console.log('Body in route handler:', body.length)
 
  return NextResponse.json({ received: body.length })
}

Good to know

  • この設定は、アプリケーションでプロキシが使用されている場合にのみ適用されます。
  • 10MB のデフォルト制限は、メモリ使用量と一般的なユースケースのバランスをとるように設計されています。
  • 制限はリクエストごとに適用され、すべての同時リクエスト全体でグローバルに適用されるわけではありません。
  • 大きなファイルをアップロードするアプリケーションの場合は、それに応じて制限を増やすことを検討してください。