В медиатеку WordPress не лезет большой файл, а в интерфейсе появляется что-то вроде «От сервера получен неожиданный ответ. Файл, возможно, не был загружен корректно». Обычно так бывает с видео, тяжёлыми архивами и исходниками. И почти всегда дело не в самом WordPress, а в лимитах PHP, веб-сервера или CDN перед ним.
Где режется загрузка
- PHP:
upload_max_filesize,post_max_sizeи таймауты. - Nginx:
client_max_body_sizeотсекает тело запроса ещё до PHP. - Cloudflare: через прокси на тарифах Free и Pro проходит запрос не больше 100 МБ.
- Сеть: обрыв соединения или таймаут прокси на медленном канале.
Какой лимит действует сейчас, WordPress показывает сам: в разделе «Медиафайлы → Добавить» под кнопкой выбора файлов написан максимальный размер загружаемого файла. Это меньшее из значений upload_max_filesize и post_max_size. Ниже проверка по порядку: PHP, Nginx, Cloudflare, логи.
Лимиты PHP-FPM
По умолчанию в PHP upload_max_filesize равен 2 МБ, а post_max_size 8 МБ, так что без настройки большой файл не пройдёт. Откройте php.ini для FPM, например /etc/php/8.3/fpm/php.ini в Ubuntu 24.04 или /etc/php/8.4/fpm/php.ini в Debian 13, и поднимите значения:
upload_max_filesize = 256M post_max_size = 256M max_execution_time = 300 max_input_time = 300
upload_max_filesizeэто потолок для одного файла;post_max_sizeограничивает весь POST-запрос, он должен быть не меньше upload_max_filesize;max_execution_timeиmax_input_timeнужны, чтобы долгую загрузку не обрывало по таймауту.
Перезапустите FPM своей версии:
sudo systemctl restart php8.3-fpm
Проверьте, что правите тот пул, который реально обслуживает сайт: на сервере бывает несколько версий PHP. Ещё лимит может быть задан прямо в конфиге пула через php_admin_value[upload_max_filesize], и тогда он перекрывает php.ini. Что видит сам сайт, удобно смотреть в «Инструменты → Здоровье сайта → Информация → Сервер».
Nginx: client_max_body_size
По умолчанию client_max_body_size в Nginx всего 1 МБ. Если запрос больше, Nginx отвечает ошибкой 413 Request Entity Too Large, и до PHP дело не доходит. Директиву можно задать в блоке http, server или location:
client_max_body_size 256M;
Проверка конфига и перезагрузка:
sudo nginx -t sudo systemctl reload nginx
Если перед сайтом стоит ещё один прокси, например Nginx на другом сервере или панель хостинга, лимит нужно поднять на каждом уровне. Для долгих загрузок через PHP-FPM пригодится и fastcgi_read_timeout.
Cloudflare и крупные файлы
Если домен идёт через прокси Cloudflare (оранжевое облако), действует лимит на размер запроса. По документации Cloudflare на Free и Pro это 100 МБ, на Business 200 МБ, на Enterprise до 5 ГБ. При превышении будет та же ошибка 413, но уже от Cloudflare.
Для разовой загрузки файла больше 100 МБ проще всего временно переключить нужную запись в DNS Cloudflare в режим DNS only (серое облако), загрузить файл напрямую на сервер и вернуть прокси. Режим разработки (Development Mode) здесь не поможет: он только обходит кэш, а лимит на размер запроса остаётся.
Ещё одно ограничение: Cloudflare ждёт ответа сервера примерно 125 секунд, после этого отдаёт ошибку 524. Если сервер долго обрабатывает загруженный файл, это тоже может сорвать загрузку. Подробности в описании лимитов соединений.
Другие варианты: залить файл по SFTP или rsync в wp-content/uploads и добавить его в медиатеку командой wp media import, сделать отдельный поддомен для загрузок без прокси или перейти на тариф с большим лимитом. Держать серое облако постоянно без нужды не стоит, сервер тогда виден напрямую.
Если ошибка осталась
- Логи Nginx:
/var/log/nginx/error.log. Строка «client intended to send too large body» означает, что упёрлись в client_max_body_size. - Логи PHP-FPM: например
/var/log/php8.3-fpm.log. - Сравните реальный размер файла с выставленными лимитами и проверьте, что post_max_size не меньше upload_max_filesize.
- На нестабильном канале помогает загрузка по SFTP или плагины, которые грузят файл частями.
В итоге «неожиданный ответ» при загрузке в WordPress почти всегда значит, что тело запроса не пропускает какое-то звено цепочки PHP, веб-сервер, CDN. Поднимите upload_max_filesize и post_max_size, client_max_body_size, учтите лимит Cloudflare и посмотрите логи. Когда лимиты согласованы на всех уровнях, медиатека спокойно принимает и файлы по 200 МБ и больше.