#Симптом и границы применимости
Малые файлы проходят, а большие зависают либо получают 413, 408, 499, 502 или 504. HTTP/2 сам по себе не отменяет ограничения размера и времени на Nginx, PHP и в приложении; нужно установить реальный уровень ошибки.
Эта инструкция относится к конкретному сайту в панели управления хостингом, когда его обслуживают Nginx, Apache, PHP-FPM или их сочетание. Названия разделов и доступность SSH зависят от установленной панели и прав пользователя; шаги, которых нет в вашем интерфейсе, выполняет администратор сервера.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Лимит размераclient_max_body_size, ограничения приложения или PHP | 413 сразу после отправки заголовков/тела | Сопоставить размер с настроенным лимитом |
| Тайм-аут или обрыв потокаПрокси и сервер обрабатывают крупное тело дольше обычного | Пауза, затем 408/499/504 или сброс | Сопоставить таймеры и журналы |
| Различия HTTP/1.1 и HTTP/2Клиент, промежуточный прокси или конфигурация имеют проблему протокола | Через --http1.1 работает, через --http2 нет | Проверить версию, модули и промежуточный узел |
#Пошаговая диагностика и исправление
- Повторите загрузку с двумя размерамиВозьмите два разрешённых тестовых файла, например 100 КБ и 10 МБ, без персональных данных. Через обычную форму проверьте оба, зафиксируйте размеры, момент прерывания и код ответа через F12 → «Сеть». Не загружайте исполняемые файлы.
- Сравните протоколыДля доступной тестовой конечной точки используйте curl с отдельными запросами HTTP/1.1 и HTTP/2. Не отправляйте существующий файл в не предназначенную для загрузки конечную точку. Сравнение протокола информативно только при одинаковых адресе, методе и теле запроса.Linux · Терминал (Bash)КомандаНа клиентском компьютере с curl, поддерживающим HTTP/2; это диагностические GET/HEAD-запросы, не проверка полной загрузки файла.
curl -sS -I --http1.1 https://example.com/curl -sS -I --http2 https://example.com/
- Определите источник ограниченияВ панели сайта проверьте ограничения размера запросов и PHP. В SSH изучите client_max_body_size, а для PHP — upload_max_filesize и post_max_size веб-обработчика. Последнее значение должно учитывать и поля формы, не только вес самого файла.
- Проверьте тайм-ауты в журналеВремя ошибки сопоставьте с Nginx error_log и журналом PHP-FPM. 413 у Nginx отличается от PHP-ошибки загрузки; 504 может означать ожидание ответа приложения. Не увеличивайте все лимиты до бесконечности.
- Проверьте реально включённый HTTP/2Убедитесь, что установленные версии Nginx/OpenSSL поддерживают используемый синтаксис HTTP/2 и ALPN. У новых сборок применяется директива http2 on; в старых конфигурациях встречается listen ... http2. Не копируйте синтаксис без учёта версии.
- Измените только подтверждённый параметрЕсли выявлен лимит, установите разумное значение под предполагаемые файлы в нужном виртуальном хосте и соответствующем веб-обработчике. При подтверждённом обрыве — настройте тайм-аут по реальному времени обработки. Создайте резервную копию, проверьте синтаксис и обновите сервис штатно.
- SSH с административными правами; тестирует конфигурацию перед её применениемLinux · Терминал (Bash)КомандаНужен sudoSSH с административными правами; тестирует конфигурацию перед её применением.
sudo nginx -t
- Проверьте и большие, и запрещённые файлыЗагрузите большой разрешённый файл повторно через HTTP/2 и проверьте целостность результата. Убедитесь, что чрезмерный размер и недопустимые типы по-прежнему корректно отклоняются. Если ошибка остаётся только в одном браузере — проверьте его расширения и CDN.
#Проверка результата
Большой допустимый файл передаётся через HTTP/2 и сохраняется полностью, а ограничения безопасности остаются включёнными.
#Если проблема осталась
При 499 проверьте клиента и внешнюю сеть, при 504 — время ответа приложения, при 413 — конкретный лимит на каждом слое; не делайте вывод только по названию протокола.
#Безопасный откат
Если после изменения ошибка усилилась, верните сохранённое значение только изменённого параметра и повторно проверьте конфигурацию используемого веб-сервера до применения. Не возвращайте всю базу или весь сервер из резервной копии, если достаточно откатить одну настройку. При отсутствии доступа к нужному уровню обратитесь к администратору с точными временем, адресом, кодом ответа и обезличенными фрагментами журналов.