#Что означает ошибка
413
Ошибка 413 Request Entity Too Large в nginx возникает при загрузке файла, превышающего client_max_body_size (по умолчанию 1 МБ). Для PHP также действуют лимиты upload_max_filesize и post_max_size.
Нужно поднять лимиты на всех уровнях: nginx, PHP, приложение.
Если перед nginx стоит прокси/CDN, у него тоже есть ограничения.
Увеличьте client_max_body_size и перезагрузите конфигурацию.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Малый лимит1 МБ. | Проявляется как «413» или близкий по смыслу сбой. | Увеличьте. |
| PHP лимитыupload. | Проявляется как «413» или близкий по смыслу сбой. | Увеличьте. |
| ПроксиДругой слой. | Проявляется как «413» или близкий по смыслу сбой. | Настройте. |
| КонфигНе применён. | Проявляется как «413» или близкий по смыслу сбой. | Reload. |
#Пошаговое решение
- Поднимите
client_max_body_sizeАдминистратор сервера откройте по SSH конфигурацию виртуального хоста Nginx и найдите лимитclient_max_body_sizeчерезsudo nginx -T 2>&1 | grep -n client_max_body_size. Если для нужного сайта требуется, например, загрузка файлов до 20 МБ, установитеclient_max_body_size 20m;в соответствующийserverилиlocation, а не во всех сайтах. Уточните допустимый размер в правилах приложения и создайте резервную копию изменяемого файла. - Поднимите лимиты PHPЕсли загрузка идёт через PHP, отдельно проверьте его фактические параметры
upload_max_filesizeиpost_max_sizeименно у веб-PHP (phpinfo()только в закрытой временной странице либо панель хостинга).post_max_sizeдолжен быть больше предела файла с учётом других полей формы. Ошибка Nginx 413 возникает до передачи запроса PHP, поэтому менять только php.ini недостаточно. - Проверьте конфигурациюСохраните конфигурацию Nginx и выполните
sudo nginx -t: успешный выводsyntax is ok/test is successfulдопускает применение. Если есть ошибка с номером строки, верните предыдущий файл и исправьте синтаксис; не выполняйте перезапуск до успешной проверки. - Перезагрузите службыПримените исправление
sudo systemctl reload nginxпослеnginx -t, затем при необходимости отдельно согласуйте перезагрузку соответствующего пула PHP-FPM после изменения php.ini. Не перезапускайте произвольныйphp8.2-fpm, если сайт использует другую версию. Проверьте загрузку файла чуть меньше установленного порога и файла больше порога; второй должен корректно отклоняться. - Проверьте лимиты проксиЕсли 413 остаётся, выясните, где завершается HTTPS: внешний CDN, балансировщик, Ingress Kubernetes или ещё один прокси может иметь меньший лимит. Сопоставьте заголовки ответа и журналы каждого уровня; меняйте только тот уровень, который реально отвергает запрос, сохраняя ограничения безопасности на загрузку слишком больших файлов.
#nginx
В /etc/nginx/nginx.conf (блок http) или в блоке server/location добавьте client_max_body_size 64m;. Проверьте синтаксис sudo nginx -t и примените sudo systemctl reload nginx. Для API с большими загрузками задайте значение только для нужного location.
#PHP и приложение
В php.ini: upload_max_filesize = 64M и post_max_size = 64M, max_execution_time = 120. Перезапустите php8.2-fpm. В WordPress проверьте «Медиафайлы» (максимальный размер). Для Laravel — post_max_size; для Node/Express — лимит body-parser (limit: '50mb').
#Прокси и CDN
Cloudflare на бесплатном тарифе ограничивает размер запроса 100 МБ. Балансировщики (AWS ALB, Traefik) имеют свои лимиты. В Kubernetes Ingress для nginx используйте аннотацию nginx.ingress.kubernetes.io/proxy-body-size: "64m". Для очень больших файлов используйте загрузку по частям (chunked upload).
sudo nginx -t && sudo systemctl reload nginx# PHP-FPM перезагружать лишь при отдельном изменении его настроек и после определения версии сайта.#Как проверить результат
Проверьте лимит curl-запросом с тестовым файлом: dd if=/dev/zero of=test.bin bs=1M count=20 и curl -F "file=@test.bin" https://example.com/upload -o /dev/null -w "%{http_code}\n". Код 413 означает, что лимит ещё где-то мал, код 200 или 4xx приложения — что nginx пропустил файл. Помните, что ограничение может стоять в нескольких местах одновременно, поэтому проверяйте цепочку от внешнего прокси до приложения. После изменения не забудьте удалить тестовый файл.