Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 413: Request Entity Too Large (client_max_body_size exceeded) Linux / DevOps

Nginx Error 413: Request Entity Too Large — Как увеличить размер загрузки

Обновлено: 18.08.2026  ·  Официальная база знаний

При попытке загрузить файл (изображение, видео, архив или тяжелый JSON payload) веб-сервер прерывает загрузку и возвращает клиенту статус 413 Request Entity Too Large. В /var/log/nginx/error.log фиксируется: client intended to send too large body: 15728640 bytes, client: ..., request: "POST /upload HTTP/1.1".

ПараметрЗначение по умолчаниюПоследствия для загрузок
Nginx client_max_body_size1m (1 Мегабайт)Любой файл более 1 МБ сбрасывается с ошибкой 413
PHP upload_max_filesize2MСкрипт не принимает файлы более 2 МБ
PHP post_max_size8MСброс всей формы POST при превышении размера
  • Загрузка файлов размером до 1 МБ проходит успешно, более крупные файлы сбрасываются мгновенно до попадания в бэкенд.
  • В Kubernetes Nginx Ingress возвращает 413 при дефолтных аннотациях ингресса.
  1. Откройте конфигурационный файл /etc/nginx/nginx.conf или файл виртуального хоста.
  2. Добавьте или увеличьте директиву client_max_body_size в секции http, server или целевом location:
    # Разрешить загрузку файлов до 100 Мегабайт (0 — полностью отключить проверку размера):
    client_max_body_size 100M;
  3. Если используется стек PHP-FPM, синхронно увеличьте лимиты в файле php.ini:
    upload_max_filesize = 100M
    post_max_size = 105M
    memory_limit = 256M
  4. Если сайт работает в Kubernetes через Ingress-Nginx, добавьте аннотацию в манифест ingress.yaml:
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  5. Проверьте синтаксис Nginx и примените конфигурацию:
    sudo nginx -t
    sudo systemctl reload nginx
    sudo systemctl restart php8.2-fpm # если правили php.ini
Важно для Cloudflare: Бесплатный тарифный план Cloudflare имеет жесткое неустранимое ограничение на максимальный размер тела запроса в 100 МБ. Для передачи файлов большего размера загружайте их напрямую мимо прокси (DNS only) или используйте multipart chunked upload (Direct to S3).
Практический опыт инженера: Убедитесь, что в каталоге `client_body_temp_path` (обычно `/var/lib/nginx/body`) достаточно свободного места и у процесса Nginx есть права на запись, иначе большие загрузки упадут со статусом 500.

Частые вопросы (FAQ)

Где лучше прописывать client_max_body_size: в http или location?

Рекомендуется выставлять глобальный строгий лимит (например, 2M) в блоке http для защиты от переполнения памяти, и точечно увеличивать его до 50M-500M в блоке location /upload для конкретных эндпоинтов загрузки.

Что произойдет, если выставить client_max_body_size 0?

Значение 0 полностью отключает проверку размера тела клиентского запроса в Nginx, позволяя передавать файлы любого объема (ограничивается только свободным местом на диске).

Куда Nginx сохраняет временные файлы при загрузке больших объемов?

Если размер тела превышает client_body_buffer_size, Nginx буферизирует тело запроса во временный каталог /var/lib/nginx/body/ (client_body_temp_path).

Почему после изменения client_max_body_size ошибка 413 осталась?

Проверьте всю цепочку проксирования: лимит мог сработать на внешнем WAF (Cloudflare), промежуточном балансировщике (HAProxy, AWS ALB) или Nginx Ingress Controller в Kubernetes.