Как увеличить максимальный размер загрузки файлов в Nginx и PHP
/ 2 min read
Table of Contents
По умолчанию большинство веб-серверов и интерпретаторов PHP имеют жесткие ограничения на размер загружаемых файлов (обычно от 2 до 8 МБ). Это приводит к ошибкам «413 Request Entity Too Large» в Nginx или уведомлениям о превышении лимита в CMS.
Для решения проблемы необходимо изменить настройки на уровне веб-сервера и на уровне PHP.
1. Настройка PHP
Отредактируйте файл php.ini. Путь к нему зависит от вашей версии PHP и способа запуска (FPM или Apache). Например: /etc/php/8.3/fpm/php.ini.
Найдите и измените следующие параметры:
; Максимальный размер данных в одном POST-запросеpost_max_size = 100M
; Максимальный размер одного загружаемого файлаupload_max_filesize = 100MПосле изменений перезапустите службу PHP-FPM:
sudo systemctl restart php8.3-fpm2. Настройка Nginx
Nginx имеет собственный лимит на размер тела запроса. Если его не увеличить, запрос будет отклонен сервером до передачи в PHP.
Добавьте директиву client_max_body_size в блок http, server или location конфигурационного файла (обычно /etc/nginx/nginx.conf):
server { listen 80; server_name example.com;
# Увеличиваем лимит до 100 МБ client_max_body_size 100M;
# ... остальная конфигурация}Проверьте конфигурацию и перезапустите Nginx:
sudo nginx -tsudo systemctl restart nginx3. Использование в Docker
При использовании официальных образов настройки PHP переопределяются через пользовательский .ini файл, смонтированный как volume:
services: php: image: php:8.3-fpm volumes: - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.iniСодержимое uploads.ini:
upload_max_filesize = 100Mpost_max_size = 100MРезюме
Для корректной загрузки больших файлов убедитесь, что параметр client_max_body_size в Nginx равен или превышает значения upload_max_filesize и post_max_size в PHP.