단일 Nginx Docker와 웹사이트용 다중 Nginx Docker 비교

단일 Nginx Docker와 웹사이트용 다중 Nginx Docker 비교

어리석은 질문이라면 죄송합니다. 하지만 Nginx Docker를 사용하여 여러 Flask 웹사이트 Docker 컨테이너를 호스팅할 서버를 구축하고 있습니다. 이제 내 질문은 하나의 기본 nginx 도커 컨테이너를 갖고 여기에 모든 웹 사이트 Docker 컨테이너를 호스팅하는 것이 더 낫습니까, 아니면 docker compose를 사용하여 각 애플리케이션에 대해 Nginx 도커 컨테이너를 갖는 것이 더 낫습니까?

자원 처리와 효율성 측면에서 어느 것이 더 나은지 알고 싶습니다.

@Jacob 귀하의 답변에 따라 다음과 같은 설정을 시도하고 있습니다.

도커-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는 하나의 서비스만 하나의 포트에 바인딩할 수 있으므로 명확히 해두겠습니다. 따라서 포트 80/443(http/ https) 하나의 nginx 컨테이너만 실행하여 서로 다른 호스트 이름(가상 호스트) 간의 라우팅을 처리하고 트래픽을 적절한 백엔드로 리디렉션할 수 있습니다.

또한 이러한 백엔드를 다른 포트에 노출하거나 동일한 Docker 네트워크를 공유해야 합니다.

고려해야 할 사항은 다음과 같은 보다 동적인 백엔드에 더 적합한 것을 갖춘 기본 nginx 컨테이너의 대안입니다.Traefik또는nginx 프록시

관련 정보