Перейти к содержимому

413 Request Entity Too Large

Почему возникает ошибка 413 Request Entity Too Large

Ошибка 413 Request Entity Too Large (или «Payload Too Large») появляется, когда браузер отправляет на сервер файл или запрос, размер которого превышает максимально допустимый лимит, установленный на стороне сервера. В контексте WordPress эта ошибка чаще всего возникает при попытке загрузить изображения, темы, плагины или CSV-файлы через медиатеку или импорт.

HTTP-статус 413 регламентируется RFC 7231 и сообщает клиенту: «Сервер отказывается обрабатывать запрос, потому что его тело (payload) слишком велико».

Основные причины

| Причина | Типичный порог | Где настраивается |
|—|—|—|
| upload_max_filesize в PHP | 2–32 MB | php.ini или .htaccess |
| post_max_size в PHP | 8–64 MB | php.ini или .htaccess |
| Лимит Nginx client_max_body_size | 1 MB по умолчанию | nginx.conf |
| Лимит Apache LimitRequestBody | 0 (без лимита) | .htaccess / httpd.conf |
| Прокси / CDN (Cloudflare, Sucuri) | 100–500 MB | панель провайдера |

Как диагностировать: пошаговая инструкция

1. Проверьте лимиты PHP

Создайте в корне сайта файл phpinfo.php:

<?php phpinfo(); ?>

Перейдите на https://вашсайт.ру/phpinfo.php и найдите параметры upload_max_filesize и post_max_size. Не забудьте удалить файл после проверки — это потенциальная уязвимость!

2. Проверьте Nginx (если сайт на Nginx)

Подключитесь к серверу по SSH:

# Проверить текущее значение
nginx -t 2>&1 | grep -i "client_max_body_size"

# Или найти в конфигах
grep -r "client_max_body_size" /etc/nginx/

3. Проверьте логи сервера

# Логи Nginx
tail -100 /var/log/nginx/error.log | grep 413

# Логи Apache
tail -100 /var/log/apache2/error.log | grep 413

# PHP error log
tail -100 /var/log/php_errors.log | grep -i "upload"

Решения

Решение A: увеличить upload_max_filesize и post_max_size

Найдите и отредактируйте php.ini:

upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M

Перезапустите PHP-FPM:

sudo systemctl restart php8.1-fpm

Если нет доступа к php.ini — добавьте в .htaccess (Apache):

php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value max_execution_time 300

Или в wp-config.php:

@ini_set('upload_max_filesize', '128M');
@ini_set('post_max_size', '128M');
@ini_set('max_execution_time', '300');

Решение B: настроить Nginx

В блоке server или location конфига добавьте:

client_max_body_size 128M;

Проверьте и перезагрузите:

sudo nginx -t
sudo systemctl reload nginx

Решение C: настроить Cloudflare

В панели Cloudflare перейдите: Rules → Page Rules → Create Page Rule. Укажите ваш сайт и включите Cache Level: Bypass для зоны загрузки, либо увеличьте лимит в настройках прокси.

Решение D: обходной путь через .htaccess (Apache)

Если нет доступа к основным конфигам — создайте или отредактируйте .htaccess в корне сайта:

<IfModule mod_fcgid.c>
    FcgidMaxRequestLen 134217728
</IfModule>
<IfModule mod_security.c>
    SecRequestBodyLimit 134217728
    SecRequestBodyInMemoryLimit 134217728
</IfModule>

Профилактика

  1. Добавьте проверку размера файла на клиенте — JavaScript до отправки на сервер:
    javascript
    const input = document.querySelector('input[type="file"]');
    input.addEventListener('change', function(e) {
    if (this.files[0].size > 50 * 1024 * 1024) {
    alert('Файл слишком большой! Максимум 50 MB.');
    this.value = '';
    }
    });

  2. Используйте плагин — например, Add Upload File Types & Size Limit для настройки лимитов без правки кода.

  3. Настройте компрессию изображений перед загрузкой — плагины Smush, ShortPixel или Imagify уменьшают вес в 3-5 раз без потери качества.

Заключение

Ошибка 413 — одна из самых частых проблем при загрузке медиафайлов в WordPress. В 90% случаев её решает увеличение upload_max_filesize и post_max_size в PHP, а при использовании Nginx — добавление директивы client_max_body_size. Всегда проверяйте всю цепочку: клиент → CDN → Nginx/Apache → PHP, так как любой из узлов может иметь свой лимит.