Nginx Docker único frente a Nginx Docker múltiple para sitios web

Nginx Docker único frente a Nginx Docker múltiple para sitios web

Perdóneme si hago una pregunta estúpida, pero estoy construyendo un servidor donde alojaré varios sitios web de Flask Docker Container usando Nginx Docker. Mi pregunta ahora es: ¿es mejor tener un contenedor acoplable Nginx principal y luego alojar todos mis contenedores Docker de sitios web en él o tener un contenedor acoplable Nginx para cada aplicación con Docker Compose?

Quiero saber en términos de manejo de recursos y eficiencia ¿cuál es mejor?

@Jacob Siguiendo tu respuesta, estoy intentando configurar algo como esto

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

Ahora cada sitio web está disponible en localhost:8085 y localhost:8086

Luego estoy usando un proxy inverso en Nginx (no Docker sino el que está instalado en mi servidor) para redirigir el tráfico a mi nombre de dominio:

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


}

Respuesta1

No es una pregunta estúpida, pero aclaremos, no importa cómo configure nginx y Docker, una IP de host solo puede vincular un servicio a un puerto, por lo que si desea manejar varios sitios web en una dirección IP en el puerto 80/443 (http/ https) solo podrá ejecutar UN contenedor nginx para manejar el enrutamiento entre diferentes nombres de host (hosts virtuales) y redirigir el tráfico a su backend apropiado.

También deberá exponer estos backends en diferentes puertos o compartir la misma red acoplable.

Algo que quizás quieras considerar es una alternativa al contenedor nginx estándar con algo más orientado a backends más dinámicos comoTraefikoproxy nginx

información relacionada