skip to content
Skesov.pro

Как увеличить максимальный размер загрузки файлов в 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:

Terminal window
sudo systemctl restart php8.3-fpm

2. Настройка 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:

Terminal window
sudo nginx -t
sudo systemctl restart nginx

3. Использование в Docker

При использовании официальных образов настройки PHP переопределяются через пользовательский .ini файл, смонтированный как volume:

docker-compose.yml
services:
php:
image: php:8.3-fpm
volumes:
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

Содержимое uploads.ini:

upload_max_filesize = 100M
post_max_size = 100M

Резюме

Для корректной загрузки больших файлов убедитесь, что параметр client_max_body_size в Nginx равен или превышает значения upload_max_filesize и post_max_size в PHP.