ウェブサイト用の単一の Nginx Docker と複数の Nginx Docker

ウェブサイト用の単一の Nginx Docker と複数の Nginx Docker

愚かな質問をしているようでしたらお許しください。Nginx Docker を使用して複数の Flask ウェブサイト Docker コンテナをホストするサーバーを構築しています。今の質問は、メインの nginx docker コンテナを 1 つ用意して、そこにすべてのウェブサイト Docker コンテナをホストする方がよいのか、それとも docker compose を使用してアプリケーションごとに nginx docker コンテナを用意する方がよいのかということです。

リソース処理と効率の観点から、どちらを選択するのがよいのか知りたいです。

@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 をどのように構成しても、1 つのホスト IP は 1 つのサービスを 1 つのポートにしかバインドできないため、ポート 80/443 (http/https) の 1 つの IP アドレスで複数の Web サイトを処理する場合は、異なるホスト名 (仮想ホスト) 間のルーティングを処理し、トラフィックを適切なバックエンドにリダイレクトするために 1 つの nginx コンテナーしか実行できないということです。

また、これらのバックエンドを異なるポートで公開するか、同じ Docker ネットワークを共有する必要もあります。

検討したいことの一つは、標準のnginxコンテナの代わりに、より動的なバックエンドに適したものを使用することです。トラエフィクまたはnginx プロキシ

関連情報