Увеличение максимального размера тела клиента в nginx conf на AWS Elastic Beanstalk
Я бегу в "413 Слишком Большой Объект Запроса" ошибки при публикации файлов размером более 10 МБ в нашем API, работающем на AWS Elastic Beanstalk.
Я провел довольно много исследований и считаю, что мне нужно поднять client_max_body_size для Nginx, однако я не могу найти никакой документации о том, как это сделать с помощью Elastic Beanstalk. Мое предположение заключается в том, что он должен быть изменен с помощью файла ebetension.
У кого-нибудь есть мысли как я могу до предела? 10MB довольно слаб, должен быть способ поднять это вручную.
9 ответов:
существует два метода, которые вы можете взять для этого:
поддерживается / рекомендуется в документации AWS
для некоторых типов приложений, например Java SE,перейти,узел.js, и, возможно, Ruby (это не документировано для Ruby, но все другие платформы Nginx, похоже, поддерживают это), Elasticbeanstalk имеет встроенное понимание того, как настроить Nginx.
чтобы расширить эластичный Бобовый Стебель по умолчанию nginx конфигурация, добавить .файлы конфигурации conf в папку с именем
.ebextensions/nginx/conf.d/
в исходном пакете приложения. Конфигурации упругих бобовый стебель это то nginx включает в себя .файлы conf в этой папке автоматически.~/workspace/my-app/ |-- .ebextensions | `-- nginx | `-- conf.d | `-- myconf.conf `-- web.jar
чтобы увеличить максимальный размер загрузки, а затем создать файл в
.ebextensions/nginx/conf.d/proxy.conf
установка максимального размера тела на любой размер вы бы предпочитаю:client_max_body_size 50M;
создайте файл конфигурации Nginx напрямую
после долгих исследований и часов работы с замечательной командой поддержки AWS я создал конфигурационный файл внутри
.ebextensions
для изменения конфигурации nginx. Это изменение позволило увеличить размер тела поста.внутри
files: "/etc/nginx/conf.d/proxy.conf" : mode: "000755" owner: root group: root content: | client_max_body_size 20M;
изменил приведенный выше ответ ради безопасности (и синтаксис был неправильным, см. две записи "владелец:" в YAML), Ребята, пожалуйста, не устанавливайте разрешения 777 ни на что. Если вам не нравится быть взломанным, и установите владельца конфигурационных файлов Nginx в root.
Смотрите также ниже Ответ чтобы сделать nginx пикап это изменение после развертывания.
EDIT: после того, как вы развернули сборку с инструкциями в принятом ответе ником Парсонсом, вам может потребоваться перезапустить сервер 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 по-другому. Я хотел бы увидеть прокси.файл conf создается во время развертывания, но затем удаляется до завершения развертывания. Документация AWS объясняет, как настройки прокси-сервера:
создать
.ebextensions/nginx/conf.d/proxy.conf
файл, который содержит только строку:client_max_body_size 40M;
следуя принятому ответу,вам может потребоваться перезагрузить файл конфигурации nginx.
для этого добавьте следующую команду
container_commands: 01_reload_nginx: command: "service nginx reload"
Это было бы лучшей практикой, чем ssh'ING в ваш экземпляр eb и вручную делать это с помощью команды.
это в сочетании с принятым ответом решило ту же проблему для меня. (Рельсы, Пума, NGINX)
в качестве альтернативы вы можете изменить прокси-сервер на Apache. Для этого перейдите в конфигурацию и измените конфигурацию программного обеспечения. Первый вариант здесь - "прокси-сервер", выберите"apache".
принятый ответ не работал для меня, поэтому вместо этого я перезаписал конфигурацию nginx со своей собственной.
я создал файл с названием
nginx.conf
в каталоге.ebextensions/nginx/
я SSHed в запущенный экземпляр моего приложения Beanstalk и скопировал содержимое , используя
cat /etc/nginx/nginx.conf
и копирование с терминала.я вставил содержимое в
nginx.conf
файл, который я ранее создал в.ebextensions/nginx/
, и изменил директиву http, чтобы включитьclient_max_body_size 50M;
. Я, наконец, перераспределил свое приложение с помощьюeb deploy
и это сработало. Во время развертывания должно появиться следующее сообщение:информация: конфигурация Nginx обнаружена в '.ebextensions/nginx' справочник. AWS Elastic Beanstalk больше не будет управлять nginx конфигурация для этой среды.
вот содержание моего
.ebextensions/nginx/nginx.conf
file:# Elastic Beanstalk Nginx Configuration File user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 33193; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; include conf.d/*.conf; map $http_upgrade $connection_upgrade { default "upgrade"; } server { listen 80 default_server; access_log /var/log/nginx/access.log main; client_header_timeout 60; client_body_timeout 60; keepalive_timeout 60; gzip off; gzip_comp_level 4; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; # Include the Elastic Beanstalk generated locations include conf.d/elasticbeanstalk/*.conf; } client_max_body_size 50M; }
мне не пришлось перезапускать службу nginx, ни окружающая среда.
Примечание: убедитесь, что ваш .ebextensions является частью .zip-файл, созданный и загруженный в Beanstalk во время развертывания (он не игнорируется в
.gitignore
или.ebignore
если вы используете его).
для Golang без Докера я следовал этим инструкциям из aws doc:
настройка обратного прокси-сервера
если вы хотите включить директивы в дополнение к тем, что в nginx.conf http block, вы также можете предоставить дополнительные файлы конфигурации в
.ebextensions/nginx/conf.d/
каталог вашего исходного пакета. Все файлы в этой папке .расширение конф. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html#go-complex-appsЯ создал файл
proxy.conf
на.ebextensions/nginx/conf.d/
в корне моего проекта, с просто 1 линия внутри:client_max_body_size 20M;
если он все еще не работает, убедитесь, что
.ebextensions
папка и подпапки включены в почтовый индекс развертывания. Нет необходимости перезапускать Nginx вручную.