Один Nginx Docker против нескольких Nginx Docker для веб-сайтов

Один Nginx Docker против нескольких Nginx Docker для веб-сайтов

Извините, если я задаю глупый вопрос, но я создаю сервер, на котором буду размещать несколько веб-сайтов Flask Docker Container с использованием Nginx Docker. Теперь у меня такой вопрос: лучше ли иметь один основной контейнер nginx docker и размещать на нем все мои веб-сайты Docker-контейнеры или иметь контейнер Nginx docker для каждого приложения с docker compose?

Я хочу узнать, какой вариант лучше выбрать с точки зрения обработки ресурсов и эффективности?

@Jacob После вашего ответа я пытаюсь настроить что-то вроде этого

docker-compose.yml:

version: "3.8"

services:
  portfolix:
    container_name: portfolix
    image: mervin16/portfolix:dev
    env_file:
      - config_local.env
    expose:
      - 8086
    restart: always
    networks:
      - sky_net

  mes:
    container_name: mes
    image: mervin16/mes:dev
    networks:
      - sky_net
    expose:
      - 8085
    restart: always

  nginx:
    build: ./nginx
    container_name: nginx
    ports:
      - "8085:85"
      - "8086:86"
    restart: always
    networks:
      - sky_net

networks:
  sky_net:
    name: sky_network
    driver: bridge

Теперь каждый сайт доступен на localhost:8085 и localhost:8086

Затем я использую обратный прокси-сервер на Nginx (не Docker, а тот, что установлен на моем сервере) для перенаправления трафика на мое доменное имя:

server {

server_name   mes.th3pl4gu3.com;

  location / {
    access_log  /var/log/nginx/mes/access_mes.log;
    error_log  /var/log/nginx/mes/error_mes.log;
    proxy_pass  http://localhost:8081;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mes.th3pl4gu3.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mes.th3pl4gu3.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = mes.th3pl4gu3.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


 listen        80;
  server_name   mes.th3pl4gu3.com;
    return 404; # managed by Certbot


}

решение1

Не глупый вопрос, но давайте проясним: независимо от того, как вы настроите nginx и docker, один IP-адрес хоста может привязать только одну службу к одному порту, поэтому, если вы хотите обрабатывать несколько веб-сайтов на одном IP-адресе на порту 80/443 (http/https), вы сможете запустить только ОДИН контейнер nginx для обработки маршрутизации между разными именами хостов (виртуальными хостами) и перенаправления трафика на их соответствующий бэкэнд.

Вам также придется либо разместить эти бэкэнды на разных портах, либо использовать одну и ту же сеть Docker.

Возможно, вам стоит рассмотреть альтернативу стандартному контейнеру nginx с чем-то более приспособленным для более динамичных бэкэндов, напримерТрафикилиnginx-прокси

Связанный контент