Увеличение максимального размера тела клиента в nginx conf на AWS Elastic Beanstalk


Я бегу в "413 Слишком Большой Объект Запроса" ошибки при публикации файлов размером более 10 МБ в нашем API, работающем на AWS Elastic Beanstalk.

Я провел довольно много исследований и считаю, что мне нужно поднять client_max_body_size для Nginx, однако я не могу найти никакой документации о том, как это сделать с помощью Elastic Beanstalk. Мое предположение заключается в том, что он должен быть изменен с помощью файла ebetension.

У кого-нибудь есть мысли как я могу до предела? 10MB довольно слаб, должен быть способ поднять это вручную.

9 84

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

настройка обратного прокси-сервера-Java SE

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

Для Платформы Java

чтобы создать прокси-файл конфигурации NGINX, вы должны просто добавить

.ebextension/nginx/conf.d/proxy.conf file

с содержанием client_max_body_size 20M; в нем.

"прокси.conf "будет развернут в" /etc/nginx / conf.д/прокси.conf"и автоматически включается конфигурацией NGINX.