Ошибка Nginx 413: client intended to send too large body — решение
Почему сайт выдает ошибку 413 Request Entity Too Large?
При попытке загрузить на сайт большой медиафайл, видеоролик, архив с плагином или тяжелую базу данных в phpMyAdmin процесс прерывается ошибкой 413 (Request Entity Too Large). В логе ошибок веб-сервера /var/log/nginx/error.log фиксируется запись:
2025/02/23 14:20:00 [error] 12450#12450: *1 client intended to send too large body: 15728640 bytes, client: 192.168.1.1, server: example.com, request: "POST /wp-admin/async-upload.php HTTP/1.1", host: "example.com"Причина ошибки:
В веб-сервере Nginx по умолчанию встроен жесткий лимит на максимальный размер тела входящего POST-запроса — ровно 1 Мегабайт (client_max_body_size 1M). Любой файл размером больше 1 Мб принудительно сбрасывается веб-сервером до того, как запрос дойдет до PHP или Node.js.
Пошаговое увеличение лимита в Nginx и PHP
Шаг 1. Редактируем конфигурацию Nginx
Откройте файл настроек вашего сайта или глобальный конфиг Nginx:
# Для конкретного сайта: sudo nano /etc/nginx/sites-available/default # ЛИБО для всего сервера глобально: sudo nano /etc/nginx/nginx.confШаг 2. Добавляем параметр client_max_body_size
Внутри блока
httpили блокаserverдобавьте строку с нужным максимальным размером (например, 100 Мегабайт или 0 для отключения лимита):server { listen 80; server_name example.com; # Увеличиваем размер загружаемых файлов до 100 Мб: client_max_body_size 100M; location / { # ... остальные настройки ... } }Шаг 3. Проверяем и перезапускаем Nginx
sudo nginx -t && sudo systemctl restart nginxШаг 4. Увеличиваем лимиты в PHP (php.ini)
Если сайт работает на PHP, обязательно увеличьте лимиты и в файле
php.ini, иначе ошибку начнет возвращать уже сам PHP:sudo nano /etc/php/*/fpm/php.iniНайдите и измените два параметра:
upload_max_filesize = 100M post_max_size = 100MПерезапустите PHP-FPM:
sudo systemctl restart php*-fpm.
Частые вопросы (FAQ)
Что означает значение client_max_body_size 0?
Значение 0 полностью отключает проверку размера входящего запроса на стороне Nginx. Загрузка файлов любого размера будет разрешена без ограничений.
Почему после изменения Nginx ошибка сменилась на белый экран или File exceeds upload_max_filesize?
Nginx пропустил файл, но теперь его заблокировал интерпретатор PHP. Обязательно синхронизируйте параметры upload_max_filesize и post_max_size в php.ini.
В какое место nginx.conf безопаснее всего вставлять эту директиву?
Если вы хотите применить правило для всех сайтов на сервере сразу, пропишите client_max_body_size 100M; внутри общего блока http { ... } в файле /etc/nginx/nginx.conf.
Нужно ли перезагружать весь сервер после правки конфига?
Нет, достаточно выполнить мягкую перезагрузку службы: sudo systemctl reload nginx.