Назад | Перейти на главную страницу

NGINX Установить client_max_body_size для одного маршрута на AWS Elastic Beanstalk

У меня есть приложение Node.Js, развернутое в Amazon Elastic Beanstalk. При загрузке файла я получаю следующую ошибку:

2019/03/04 17:00:42 [error] 4325#0: *722 client intended to send too large body: 30877841 bytes,
client: my ip,
server: ,
request: "POST /api/files/upload HTTP/1.1",
host: "mydomain.com",
referrer: "mydomain.com/..."

Поэтому мне нужно добавить client_max_body_size XXM к nginx.conf.

вопросы

(1) Но поскольку я использую Amazon Эластичный бобовый стебель, Я не знаю, как это сделать без подключения к каждому отдельному экземпляру EC2 и обновления файла вручную.

(2) Я также хочу увеличить максимальный размер только для один URL.

Ты можешь настроить программное обеспечение на экземпляре Linux Elastic Beanstalk используя файлы конфигурации среды. Для вашего конкретного случая в домашней папке локального приложения у вас должен быть каталог .ebextensions. В этой папке создайте новый файл, назовем его nginx.config и поместите в этот файл следующее:

---
files:
  /etc/nginx/conf.d/00_client_max_body_size.conf:
    content: "client_max_body_size 10m;"
    group: root
    mode: "000644"
    owner: root

Это инструктирует Elastic Beanstalk создать файл в /etc/nginx/conf.d/ с именем 00_client_max_body_size.conf и поместить в этот файл одну строку, содержащую:

client_max_body_size 10m;

Соберите свое приложение и загрузите новую версию в Elastic Beanstalk. Как только вы это сделаете, вы заметите в своем экземпляре Linux следующее:

$ ls -al     /etc/nginx/conf.d
total 20
drwxr-xr-x 2 root root 4096 Mar  8 00:34 .
drwxr-xr-x 4 root root 4096 Feb 15 22:24 ..
-rw-r--r-- 1 root root   25 Mar  8 00:34 00_client_max_body_size.conf
-rw-r--r-- 1 root root 1351 Mar  8 00:35 00_elastic_beanstalk_proxy.conf
-rw-r--r-- 1 root root  283 Dec 13 00:21 virtual.conf

Это будет включено в основной nginx.conf файл, который присутствует во всех средах эластичного beanstalk nodejs, так как этот файл имеет следующую строку в конце блока http:

http {

...

include /etc/nginx/conf.d/*.conf;
# End Modification
}

У меня была аналогичная ситуация с развертыванием Docker в Elastic Beanstalk. Я смог решить эту проблему с помощью добавленного здесь файла конфигурации: <app>/.ebextensions/increase_upload_size.config со следующим кодом:

container_commands:
  01_reload_nginx:
    command: "sudo service nginx reload"

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      client_max_body_size 20M;

Изменение было реализовано, когда я выполнял «Загрузить и развернуть» в EB.