Nginx увеличивает размер загружаемого файла
Обновлено: 21.11.2024
Если у вас есть сайт NGINX, который должен разрешить пользователям загружать файлы, попробуйте эту конфигурацию, чтобы предотвратить возможные атаки типа "отказ в обслуживании".
По умолчанию NGINX устанавливает ограничение в 1 МБ для загрузки файлов. Для некоторых платформ это может быть слишком мало, особенно для сайтов, которые позволяют пользователям загружать такие элементы, как изображения и видео. Однако, если вы откроете шлюзы слишком широко, вы рискуете, что бездельники поразят вас атаками типа «отказ в обслуживании» (DoS). Вы, конечно, не хотите этого.
Но что делать, если вам нужно разрешить пользователям загружать на ваш сайт NGINX более одного МБ? Вы управляете им с помощью директивы client_max_body_size. Позвольте мне показать вам, как это сделать.
Что вам понадобится
Чтобы это работало, вам необходимо установить и настроить NGINX для запуска вашего веб-сайта. Вам также понадобится пользователь с привилегиями sudo. Я буду демонстрировать на Ubuntu Server 18.04, но этот процесс должен работать на любой платформе, поддерживающей NGINX. Теперь, когда они готовы, давайте настроим.
Как настроить nginx.conf
Первое, что мы собираемся сделать, это изменить ограничение загрузки на 100 МБ в файле nginx.conf. Откройте файл командой:
sudo nano /etc/nginx/nginx.conf
Сохраните и закройте файл.
Рисунок А
Добавление конфигурации в файл конфигурации NGINX.
Затем откройте файл конфигурации для своего веб-сайта. Если вы используете файл по умолчанию, вы должны открыть этот файл с помощью команды:
sudo nano /etc/nginx/sites-available/default
В этом файле найдите раздел server и добавьте ту же строку, что и в файле nginx.conf (рис. B).
Рисунок Б
Добавление строки конфигурации в раздел сервера файла конфигурации вашего сайта.
В том же файле найдите раздел местоположения, который вы настроили для загрузки сайта, и добавьте ту же строку (рис. C).
Рисунок C
Добавление строки конфигурации в директиву местоположения.
Конечно, ваша директива загрузки, вероятно, будет немного сложнее, чем основная, которую я проиллюстрировал, но вы поняли.
Сохраните и закройте файл.
Запустите тест конфигурации NGINX с помощью команды:
Вы не должны видеть никаких ошибок. Перезапустите NGINX командой:
sudo systemctl перезапустить nginx
С этого момента, если кто-либо попытается загрузить файл размером более 100 МБ, он получит сообщение об ошибке 413 (запрос объекта слишком велик). Ваш сервер NGINX теперь немного безопаснее от DoS-атак, но при этом ваши пользователи могут загружать файлы. Нет, это не панацея от DoS-атак, но в наши дни все, что вы можете сделать, чтобы предотвратить неудачи, — это шаг в правильном направлении.
Информационный бюллетень Cybersecurity Insider
Укрепите защиту ИТ-безопасности своей организации, следя за последними новостями, решениями и рекомендациями в области кибербезопасности.
Доставка по вторникам и четвергам
Изображение: Джек Уоллен
Я хочу увеличить максимальный размер загружаемого файла.
Проведя небольшое исследование в Интернете, я обнаружил, что вам нужно отредактировать файл 'nginx.conf'.
Единственный способ получить доступ к этому файлу в настоящее время — пройти через Putty и ввести команду:
Это откроет файл, но у меня есть 2 вопроса:
- Как редактировать этот файл?
- Я нашел в Интернете, что вы должны добавить следующую строку кода:
Где мне разместить эту строку кода в nginx.conf?
4 ответа 4
Добавить client_max_body_size
Теперь, когда вы редактируете файл, вам нужно добавить строку в блок сервера, например так;
А также обновите upload_max_filesize в файле php.ini, чтобы вы могли загружать файлы одинакового размера.
Сохранение в Vi
После того, как вы закончите, вам нужно сохраниться, это можно сделать в vi, нажав клавишу esc и набрав :wq и вернувшись.
Перезапуск Nginx и PHP
Теперь вам нужно перезапустить nginx и php, чтобы перезагрузить конфиги. Это можно сделать с помощью следующих команд;
Или как называется ваша служба php.
Да, я забыл упомянуть, что использую Laravel Homestead. Итак, я открыл «/etc/php5/fpm/php.ini» и нашел строку кода «upload_max_filesize = 2M», поэтому я хочу изменить ее, чтобы «2M» стало «8M». После того, как я сделаю это редактирование, я просто нажму 'Ctrl Z', чтобы выйти из файла, а затем запущу 'sudo service nging restart'?
Выйдите из редактора, добавьте sudo к команде vi. Вот так; sudo vi /etc/nginx/nginx.conf или sudo vi /etc/php5/fpm/php.ini
Если кто-то использует прокси-сервер nginx в качестве контейнера докеров (например, jwilder/nginx-proxy), существует следующий способ настроить client_max_body_size (или другие свойства):
- Создайте пользовательский файл конфигурации, например. /etc/nginx/proxy.conf с правильным значением для этого свойства
- При запуске контейнера добавьте его как том, например -v /etc/nginx/proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro
Лично я нашел этот способ довольно удобным, так как нет необходимости создавать собственный контейнер для изменения конфигураций. Я не связан с jwilder/nginx-proxy , просто использовал его в своем проекте, и способ, описанный выше, мне помог. Надеюсь, это поможет кому-то еще.
Когда вы устанавливаете Nginx, директива client_max_body_size указывает размер загрузки, который вы хотите разрешить для загрузки на ваш сайт/сервер.
По умолчанию предел установлен на 1 МБ, поэтому, если вы попытаетесь загрузить что-то большее, вы получите сообщение об ошибке " 413 (Request Entity Too Large)", чтобы увеличить этот предел или чтобы удалить его полностью, выполните следующие действия.
Шаг 1. Откройте конфигурацию Nginx
Введите команду ниже, чтобы отредактировать файл конфигурации nginx
Примечание: вы всегда можете выбрать любой текстовый редактор, для этого просто замените "nano" на ваш любимый текстовый редактор
Шаг 2. Найдите директиву client_max_body_size
блокировка местоположения – для увеличения лимита только для определенных каталогов на вашем сайте
заблокировать сервер — чтобы увеличить лимит для определенного сервера/веб-сайта
Затем просто измените лимит, директива должна выглядеть так
Если вы хотите увеличить его до 50 МБ, просто замените 1 м на 50 м, затем нажмите ctrl+x, чтобы сохранить изменения, а затем нажмите Y, чтобы подтвердить их.
Примечание. Значение 0 полностью отключает ограничение.
Шаг 3. Перезагрузите и перезапустите Nginx
Это последний шаг, все, что вам нужно сделать сейчас, это проверить синтаксис nginx, а затем перезагрузить и перезапустить nginx.
1) Проверьте синтаксис Nginx
Введите приведенную ниже команду, чтобы проверить файл конфигурации nginx. Если ошибок не возникает, вы должны быть готовы перейти к следующей команде
2)Перезагрузите Nginx
Введите приведенную ниже команду, чтобы перезагрузить файл конфигурации nginx. Эта команда полезна, если вы не хотите перезапускать nginx, чтобы применить сделанные вами новые изменения.
3) Перезапустите Nginx
Введите команду ниже, чтобы перезапустить nginx, иногда может потребоваться перезапуск, однако вы должны запускать ее только после проверки синтаксиса nginx, если файл nginx не имеет правильного синтаксиса, перезапуск nginx предотвратит запуск nginx.< /p>
В реальной жизни ваш сервер/веб-сайт будет недоступен, потому что перезапуск остановится, и nginx не запустится снова, поскольку синтаксис неверен, nginx не может запуститься.
Заключение
В этом руководстве вы узнали, как увеличить лимит client_max_body_size в Nginx.
Если Nginx прерывает ваше соединение при загрузке больших файлов, в журналах ошибок Nginx вы увидите примерно следующее:
Это означает, что вам необходимо увеличить лимит размера загружаемого файла PHP. Следующие шаги помогут вам решить эту проблему!
Изменения в php.ini
Чтобы изменить максимальный размер загружаемого файла на 100 МБ
Примечания:
- Технически, post_max_size всегда должен быть больше, чем upload_max_filesize, но для больших чисел, таких как 100M, вы можете безопасно сделать их равными.
- Есть еще одна переменная max_input_time, которая может ограничивать размер загрузки, но я никогда не видел, чтобы это создавало какие-либо проблемы. Если ваше приложение поддерживает загрузку файлов размером в ГБ, вам может потребоваться настроить его соответствующим образом. Я использую PHP-FPM за Nginx очень давно, и я думаю, что в такой настройке это Nginx, в который клиент загружает файл, а затем Nginx копирует его в PHP. Так как копирование Nginx в PHP будет локальной операцией, max_input_time никогда не создаст проблем. Я также считаю, что Nginx может не копировать файл, а просто передать расположение файлов или записей дескрипторов в PHP!
Изменение в конфигурации Nginx
Примечание. Для очень больших файлов может потребоваться изменить значение параметра client_body_timeout. По умолчанию – 60 сек.
Перезагрузите PHP-FPM и Nginx
Изменения в мультисайте WordPress
Если вы используете установку WordPress Multisite, вам может потребоваться внести еще одно изменение в конце WordPress.
Выберите: Панель администратора сети >> Настройки. Найдите Настройки загрузки
Также измените значение максимального размера загружаемого файла
Поделиться:
20 комментариев
Это последняя строка, которая мне была нужна, ни в одной другой статье она не упоминается. Это должен быть лучший результат в Google. Здоровья!
Спасибо за оценку. 🙂
Эй, у меня такая же проблема, и я не могу понять, как сохранить себя. Я хочу иметь возможность загружать файлы размером до 300 МБ, но мой сервер не позволяет мне. Пожалуйста, помогите.
Помимо шагов, упомянутых в статье выше, вам может потребоваться изменить memory_limit в файле php.ini.
Лучше было бы проверить журналы ошибок. Вы увидите точную причину, по которой файлы размером 300 МБ не загружаются должным образом. Возможно, они загружаются, но не обрабатываются.
Спасибо за советы о том, как увеличить лимит файлов на сервере nginx. Сначала я редактировал файл php.ini, но он не работал должным образом. Проверив ваши советы, я только что отредактировал файл nginx.conf, и теперь он работает отлично.
Есть еще несколько вещей, в которых PHP и Nginx нуждаются в изменениях. Исходя из опыта Apache, в большинстве случаев это трудно предвидеть! Я сам потратил часы, когда был новичком в nginx, чтобы узнать это.
Рад узнать, что это помогло. 🙂
многосайтовая конфигурация ускользнула от моего внимания – большое спасибо… очень полезно!
Мы используем многосайтовую настройку на многих клиентских серверах. Вот как нам удалось узнать эту настройку.
Рад узнать, что это помогло. 🙂
Я просто ДОЛЖЕН был оставить комментарий, чтобы сказать, насколько это помогло мне. Я искал в Интернете решение моей ошибки 413 и просто знал, что это как-то связано с nginx. Большое спасибо.
Рад узнать, что это помогло. 🙂
newyorkwebdesigner — 100 Dock Street, Saugerties, NY 12477 — веб-дизайнер из Нью-Йорка в долине реки Гудзон, специализирующийся на дизайне WordPress и дизайне сопутствующих печатных материалов, таких как брошюры, прямая почтовая рассылка, дизайн рекламы и логотипов в газетах и журналах. Давид Радованович говорит:
Прекрасно работает. Спасибо за краткие и понятные инструкции для новичка в nginx вроде меня.
Рад узнать, что это помогло. 🙂
Золото. Этот сайт был бесценен для того, чтобы ускорить работу с Nginx и решить небольшие проблемы на этом пути. Спасибо!
Спасибо за оценку. Надеюсь, вы найдете полезными и другие руководства из этой серии.
Спасибо мой magento, большое спасибо
Я пробовал. Но это не сработало.
мои настройки php огромны.
Читайте также: