#amazon-web-services #docker-compose #amazon-elastic-beanstalk #nginx-reverse-proxy
Вопрос:
Я пытаюсь развернуть несколько служб AWS Elastic Beanstalk
с помощью Docker running on Amazon Linux 2
платформы. Поскольку в моем файле есть две службы docker-compose.yml
:
version: '3.8'
services:
beanstalk-flask:
image: "anotheruserdocker/beanstalk-flask"
ports:
- "5000:5000"
tasks:
image: "xxxxx.dkr.ecr.us-east-1.amazonaws.com/xxx:xxx"
ports:
- "8080:8080"
Мне нужно изменить nginx
конфигурацию службы, чтобы перенаправить трафик на конкретную службу.
Я следил за документацией, в которой отмечалось, что вы можете переопределить значение по умолчанию nginx.conf
своим собственным , и для того, чтобы это сделать, вам нужно поместить свой конфигурационный файл в application source bundle
, вот так .platform/nginx/nginx.conf
.
Я также включил эту include conf.d/elasticbeanstalk/*.conf;
строку, чтобы переопределить ее.
файл nginx.conf:
# Elastic Beanstalk Nginx Configuration File
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 32633;
include conf.d/elasticbeanstalk/*.conf;
upstream service_1 {
server 172.17.0.1:8080;
keepalive 256;
}
upstream serivce_2 {
server 172.17.0.1:5000;
keepalive 256;
}
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
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;
gzip on;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml rss text/javascript;
access_log /var/log/nginx/access.log main;
location / {
proxy_pass http://service_1;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
proxy_pass http://service_2;
proxy_http_version 1.1;
}
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
}
Как только я загружу приложение source bundle
, которое выглядит так:
docker-compose.yml
.platform/nginx/nginx.conf
конфигурация не меняется.
Я что-то упускаю, это ошибка или есть какие-либо другие способы изменить/изменить nginx
конфигурацию по умолчанию?
Кроме того, я заметил, что при загрузке nginx.service
не находится в запущенном состоянии, можно ли запустить эту службу при загрузке?
Спасибо.
Ответ №1:
Нашел возможное решение.
Во время создания AWS Elastic Beanstalk
среды (если вы используете тип развертывания с балансировкой нагрузки) вы можете добавить процессы, которые будет регистрировать балансировщик нагрузки(?).
Как только я добавил процессов (которые работают на 8080
и 5000
порты), я создал дополнительные listener
приложения балансировки нагрузки, который прослушивает трафик на порт 5000
(я только сделал это для этого порта, потому что по умолчанию AWS Elastic Beanstalk
среды создает слушателя, который перенаправляет трафик на целевую группу экземпляр EC2, который был запущен на указанный 8080
порт) и направляет его целевая аудитория процесс, который запускает его на этот порт.
После выполнения этих шагов это сработало.
Интересно, что я действительно не знаю, как это работало, я подключился к экземпляру EC2 и заметил, что nginx.service
он был в inactive
состоянии.
Вероятно, я не совсем ясно понимаю, как это работает за кулисами, любые разъяснения были бы весьма признательны.
Спасибо!
P.S.: Как только я получу достаточно очков репутации, я приложу несколько скриншотов предпринятых шагов.
Ответ №2:
Служба Nginx вообще не настроена. С AWS Elastic Beanstalk с докером, работающим на Amazon Linux 2 docker, они предполагают, что вы запускаете Nginx в контейнере.
Это задокументировано здесь: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-software-config