У меня возникают ошибки «413 Request Entity Too Large» при публикации файлов размером более 10 МБ в наш API, работающий на AWS Elastic Beanstalk.
Я провел довольно много исследований и считаю, что мне нужно увеличить client_max_body_size для Nginx, однако я не могу найти никакой документации о том, как это сделать с помощью Elastic Beanstalk. Я предполагаю, что его нужно изменить с помощью файла ebetension.
У кого-нибудь есть мысли о том, как я могу увеличить предел? 10 МБ - это довольно мало, должен быть способ увеличить это вручную.
Ответы:
Для этого вы можете воспользоваться двумя способами. К сожалению, одни работают для одних типов приложений EB, а другие - для других.
Поддерживается / рекомендуется в документации AWS
Для некоторых типов приложений, таких как Java SE , Go , Node.js и, возможно, Ruby (это не задокументировано для Ruby, но все другие платформы Nginx, похоже, поддерживают это), Elasticbeanstalk имеет встроенное понимание того, как настроить Nginx.
Чтобы конкретно увеличить максимальный размер загрузки, создайте файл,
.ebextensions/nginx/conf.d/proxy.conf
задав для максимального размера тела любой размер, который вы предпочитаете:Создайте файл конфигурации Nginx напрямую
После долгих исследований и часов работы с замечательной командой поддержки AWS я создал внутри файла конфигурации,
.ebextensions
чтобы дополнить конфигурацию nginx. Это изменение позволило увеличить размер тела сообщения.Внутри
.ebextensions
каталога я создал файл01_files.config
со следующим содержимым:Это создаст файл proxy.conf внутри каталога /etc/nginx/conf.d. Файл proxy.conf просто содержит один лайнер,
client_max_body_size 20M;
который делает свое дело .Обратите внимание, что для некоторых платформ этот файл будет создан во время развертывания, но затем удален на более позднем этапе развертывания.
Вы можете указать другие директивы, которые описаны в документации Nginx.
http://wiki.nginx.org/Configuration
Надеюсь, это поможет другим!
источник
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Я не уверен, но похоже, что перезапуск сервера может потребоваться.Изменил приведенный выше ответ в целях безопасности (и синтаксис был неправильным, см. Две записи «владелец:» в YAML), ребята, пожалуйста, не устанавливайте разрешения 777 для НИЧЕГО. Если вам не нравится, когда вас взламывают, и установите владельцем файлов конфигурации Nginx root.
Также см. Ответ ниже, чтобы заставить nginx принять это изменение после развертывания.
источник
РЕДАКТИРОВАТЬ: после того, как вы развернули сборку с инструкциями в принятом ответе Ника Парсонса, вам может потребоваться перезапустить сервер nginx, чтобы принять изменения.
Для этого подключитесь к экземпляру по ssh и выполните
sudo service nginx reload
Чтобы узнать больше о перезагрузке, см. Http://nginx.org/en/docs/beginners_guide.html .
В предыдущей версии Elastic Beanstalk я мог добавить для этого container_command, но теперь я обнаружил, как @cdmckay, что это вызывает сбой развертывания. Если вы перестроите свою среду, она подберет настройки client_max_body_size, пока эта инструкция находится в вашем файле конфигурации.
источник
Принятый ответ не сработал для меня, поскольку у меня есть приложение на основе JVM, и, похоже, оно по-другому выполняет конфигурацию NGINX. Я бы увидел, что файл proxy.conf создается во время развертывания, но затем удаляется до завершения развертывания. В документации AWS объясняется, как настроить прокси :
Создайте
.ebextensions/nginx/conf.d/proxy.conf
файл, содержащий только строку:client_max_body_size 40M;
источник
/etc/nginx/conf.d/
Следуя принятому ответу, вам может потребоваться перезагрузить файл конфигурации nginx.
Для этого добавьте следующую команду
Это было бы лучше, чем вводить ssh в ваш экземпляр eb и делать это вручную с помощью команды.
Это в сочетании с принятым ответом решило для меня ту же проблему. (Rails, Puma, NGINX)
источник
Я испробовал все
.ebextensions
способы добавления конфигурации уровня реализации, и это не помогло мне в последней версии AMI Amazon Linux. Я провел много исследований и после просмотра журналов обнаружил, что средство выполнения задач развертывания проверяет наличие папки, называемой.platform
каждый раз, и я подумал о том, чтобы добавить ее, как и .ebextensions. Ниже приведены настройки, которые я сделал в своей корневой папке моего проекта.Добавьте указанную ниже настройку папки в корневой уровень папки вашего проекта.
Структура папки (.platform / nginx / conf.d / proxy.conf)
Содержимое файла 1 - proxy.conf (внутри
.platform/nginx/conf.d/
папки)Содержимое файла 2 - 00_myconf.config (внутри
.platform/
папки)Полная осторожность с расширениями. Первый файл - .conf, второй - .config .
Теперь повторно разверните свой проект в Amazon Elastic Beanstalk, и вы увидите волшебство. Эта конфигурация будет добавлена ко всем вашим экземплярам EC2, созданным в рамках автоматического масштабирования.
Подробная структура папок ниже.
источник
.ebextensions
и только этот подход сработал.Единственное, что у меня сработало, это создать файл ".config" внутри .ebextensions следующим образом:
только с этим содержимым в файле .config:
нет необходимости во вложенных папках, нет необходимости перезапускать сервер приложений, обратите внимание, что внутри .ebextensions находится файл «.config», а не «.conf», и используйте правильный отступ, чтобы избежать ошибок в консоли aws, в остальном все то же не имеет значения имя файла,
спасибо: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
источник
Принятый ответ не сработал для меня, поэтому вместо этого я заменил конфигурацию nginx своей собственной.
Я создал файл с именем
nginx.conf
в каталоге.ebextensions/nginx/
Я подключился по SSH к работающему экземпляру моего приложения Beanstalk и скопировал содержимое
nginx.conf
файла, используяcat /etc/nginx/nginx.conf
и копируя с терминала.Я вставил содержимое в
nginx.conf
ранее созданный файл.ebextensions/nginx/
и изменил директиву http для включенияclient_max_body_size 50M;
. Я, наконец, повторно развернул свое приложение,eb deploy
и оно сработало. Во время развертывания вы должны получить следующее сообщение:Это содержимое моего
.ebextensions/nginx/nginx.conf
файла:Мне не пришлось перезапускать ни службу nginx, ни среду.
Примечание . Убедитесь, что ваш .ebextensions является частью файла .zip, созданного и загруженного в Beanstalk во время развертывания (он не игнорируется
.gitignore
или используется.ebignore
вами).источник
.ebextensions
что привело к тому, что принятый и популярный ответ потерпел неудачу. Я не пробовал все остальное, что вы упомянули, но спасибо за заметку GabЭто решение , предоставленное AWS , и оно работает (измените размер в соответствии с вашими потребностями).
источник
В качестве альтернативы вы можете изменить прокси-сервер на Apache. Для этого перейдите в Конфигурацию и отредактируйте конфигурацию программного обеспечения. Первый вариант здесь - «Прокси-сервер», выберите «apache».
источник
LimitRequestBody
?Для Golang без Docker я выполнил следующие инструкции из документа aws:
Я создал файл
proxy.conf
в.ebextensions/nginx/conf.d/
корне моего проекта, просто с одной строкой внутри:Если это по-прежнему не работает, убедитесь, что
.ebextensions
папка и подпапки включены в ZIP-архив развертывания. Нет необходимости перезапускать Nginx вручную.источник
Я боролся с той же проблемой, но не смог ее решить, наконец, она заработала.
вот мой файл конфигурации,
Проблема заключалась в том,
Вот мои несколько центов,
источник
После трех долгих дней попыток разобраться в этой проблеме я сразу же позвонил в замечательную службу поддержки AWS, и они дали мне несколько подсказок о том, как ее решить. Во-первых, мой проект находится на JAVA, и я использую maven и spring boot, чтобы запустить его через Elastic Beanstalk (EBS).
Как объясняется в документации AWS , вам необходимо сохранить пользовательские настройки nginx на корневом уровне вашего проекта. Для этого я создал файл client_max_body_size.conf и поместил его по следующему пути: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Этот файл содержит только следующую строку:
Настройте maven для добавления этого файла в корневую папку моего проекта во время сборки. Это было немного сложно, мне нужно было добавить следующую конфигурацию ( источник ) в мой POM.xml:
Теперь вы уже можете создать свой проект локально и запустить следующую команду SSH, чтобы убедиться, что он действительно находится в корне вашего проекта:
Теперь самое сложное. Когда вы загружаете его в EBS, ваш файл должен содержать только файл SNAPSHOT.jar и папку .ebextensions. Например, если теперь вы заархивируете файл jar и папку и загрузите их вручную, все будет работать!
Поскольку я использую Jenkins для развертывания, в частности плагин развертывания AWS EBS, вам необходимо изменить настройки файлов / папки, которые вы включаете в развертывание. По какой-то причине мне не удалось включить папку .ebextensions, поэтому я просто исключил все остальное, кроме папки и файла .jar.
Это работает!
источник
В дополнение к client_max_body_size мне пришлось добавить client_body_buffer_size . Вот файл конфигурации точек, который работал для вложения 2 МБ:
источник
Для платформы Java
Чтобы создать прокси-файл конфигурации NGINX, вам нужно просто добавить
.ebextension/nginx/conf.d/proxy.conf
файлс содержанием
client_max_body_size 20M;
в нем."proxy.conf" будет развернут в "/etc/nginx/conf.d/proxy.conf" и автоматически включен в конфигурацию NGINX.
источник
Если вы используете EC2 и самостоятельно установили nginx, лучшим решением будет создание нового файла в
папка:
а затем добавьте туда следующую строку:
затем сохраните и перезапустите nginx:
источник