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

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

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

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

9 ответов


есть два метода, которые вы можете принять для этого:

поддерживается / рекомендуется в документации AWS

для некоторых типов приложений, например Java SE, Go, узел.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. Это изменение позволило увеличить размер тела post.

внутри


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 к экземпляру и do

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 в ваш экземпляр eb и вручную делать это с помощью команды.

это в сочетании с принятым ответом решило ту же проблему для меня. (Rails, Puma, NGINX)


в качестве альтернативы вы можете изменить прокси-сервер на Apache. Для этого перейдите в раздел Конфигурация и измените конфигурацию программного обеспечения. Первый вариант здесь - "прокси-сервер", выберите"apache".


принятый ответ не работал для меня, поэтому вместо этого я преодолел конфигурацию nginx со своей собственной.

я создал файл с названием nginx.conf в каталоге .ebextensions/nginx/

Я пролил в запущенный экземпляр моего приложения Beanstalk и скопировал содержимое , используя cat /etc/nginx/nginx.conf и копирование с терминала.

я вставил содержимое в nginx.conf файл, который я ранее создал в .ebextensions/nginx/, и изменил директиву http, чтобы включить client_max_body_size 50M;. Я, наконец, перераспределил свое приложение с помощью eb deploy и это сработало. Во время развертывания необходимо получить следующее сообщение:

INFO: конфигурация Nginx обнаружена в '.ebextensions/nginx' справочник. AWS Elastic Beanstalk больше не будет управлять Nginx конфигурация для этой среды.

это содержимое моего :

# 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 без Docker я следовал этим инструкциям из aws doc:

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

если вы хотите включить директивы в дополнение к директивам в nginx.conf http block, вы также можете предоставить дополнительные файлы конфигурации в .ebextensions/nginx/conf.d/ каталог исходного пакета. Все файлы в этой папке .расширением conf. 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 папка и подпапки включены в zip развертывания. Нет необходимости перезапускать Nginx вручную.


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

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

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

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