MeWrite Docs

Nginx: 413 Request Entity Too Large

Nginxでリクエストボディのサイズが制限を超えた場合に発生するエラー

概要

Nginxがクライアントからのリクエストボディサイズが client_max_body_size の制限値(デフォルト1MB)を超えた場合に返すHTTP 413エラーです。ファイルアップロードやAPI呼び出しで頻繁に発生します。

エラーメッセージ

413 Request Entity Too Large

Nginxエラーログ:

[error] 12345#12345: *1 client intended to send too large body: 10485760 bytes, client: 192.168.1.1, server: example.com, request: "POST /upload HTTP/1.1"

原因

  1. client_max_body_sizeのデフォルト値が小さい: Nginxのデフォルトは1MBで、画像・動画アップロードでは不足する
  2. バックエンドとの設定不一致: PHP(upload_max_filesize)やアプリケーション側の制限と合っていない
  3. リバースプロキシでの二重制限: プロキシ元とプロキシ先の両方で制限がかかっている

解決策

1. nginx.confでclient_max_body_sizeを変更

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# http ブロック(全サーバーに適用)
http {
    client_max_body_size 50M;
}

# server ブロック(特定サーバーのみ)
server {
    client_max_body_size 50M;
}

# location ブロック(特定パスのみ)
location /upload {
    client_max_body_size 100M;
}

設定変更後にNginxをリロード:

1
2
3
4
5
# 設定ファイルの構文チェック
sudo nginx -t

# リロード(ダウンタイムなし)
sudo systemctl reload nginx

2. PHP(php-fpm)の設定も合わせる

1
2
3
4
; /etc/php/8.2/fpm/php.ini
upload_max_filesize = 50M
post_max_size = 55M
max_execution_time = 300
1
sudo systemctl restart php8.2-fpm

3. リバースプロキシ設定の調整

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
location /api {
    client_max_body_size 50M;
    proxy_pass http://backend;

    # タイムアウトも合わせて調整
    proxy_read_timeout 300;
    proxy_send_timeout 300;
    proxy_connect_timeout 60;

    # バッファサイズの調整
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
}

4. 制限を無効化する(非推奨)

1
2
# 0を設定するとサイズ制限なし(DDoSリスクあり)
client_max_body_size 0;

関連エラー

Nginx の他のエラー

最終更新: 2026-02-03