Как запустить два веб-сервера Nginx на одном компьютере?

Как запустить два веб-сервера Nginx на одном компьютере?

Я хочу разместить веб-сайт и запустить проект микросервисов на своем собственном сервере.

  1. Веб-сайт будет запущен с помощью веб-сервера Nginx. Домен веб-сайта будет выглядеть так sampleapp.com, и этот веб-сайт будет использовать freessl.

  2. Один из сервисов проекта Microservice будет запущен с веб-сервером Nginx как сервис в контейнере docker. Этот сервис использует поддомены моего sampleapp.com, такие как api-dev.sampleapp.com, и эти поддомены также должны работать с SSL.

При попытке развернуть сервисы с помощью docker-compose я получаю следующую ошибку:

[предупреждение] 1#1: конфликтующее имя сервера "api-dev.sample.com" на 0.0.0.0:80, проигнорировано

Основная проблема в том, как настроить SSL внутри Docker. 443 — это порт по умолчанию для HTTPS.

Конфигурационный файл Nginx моего микросервиса выглядит следующим образом.

worker_processes auto;

events {
  worker_connections 1024;
}

http {

  server {
    listen 80 default_server;
    server_name "";
    return 444;
  }

  server {
    server_name game-dev.sampleapp.com;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      proxy_pass http://game_nodes;
      proxy_redirect off;
    }
  }
  server {
    if ($host = game-dev.sampleapp.com) {
      return 301 https://$host$request_uri;
    }


    listen 80;
    listen [::]:80;
    server_name game-dev.sampleapp.com;
    return 404;
  }

  upstream game_nodes {
#    enable sticky session
 #   ip_hash;
    server game-alpha:3000;
    keepalive 8;
  }

  server {
    server_name api-dev.sampleapp.com;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://main_nodes;
      proxy_redirect off;

    }
  }

  server {
   # if ($host = api-dev.sampleapp.com) {
    #  return 301 https://$host$request_uri;
    #}

    listen 80;
    listen [::]:80;
    server_name api-dev.sampleapp.com;
    return 404;
  }

  upstream main_nodes {
    server main-alpha:8000;
    server main-beta:8000;
    keepalive 8;
  }
}

Файл конфигурации Nginx веб-сайта выглядит следующим образом:

server {
    listen 8080;
    listen [::]:8080;
    listen 8443 ssl http2;
    listen [::]:8443 ssl http2;

    server_name  sampleapp.com www.sampleapp.com;
    root /var/www/sampleapp.com;
    index index.html;

    ssl_certificate /etc/ssl/certs/sampleapp.com.pem;
    ssl_certificate_key /etc/ssl/private/sampleapp.com.key;
    ssl_client_certificate /etc/ssl/certs/origin-pull-ca.pem;
    ssl_verify_client on;

    client_max_body_size 100M;
  
    autoindex off;

    location / {
        try_files $uri $uri/ =404;

    }

}

Я разработчик, а не системный администратор, поэтому мне сложно придумать, как это лучше сделать.

решение1

Одним из возможных решений здесь является запуск трех Docker-контейнеров с Nginx.

  1. прослушивает порты 80 и 443, разгружает SSL и работает как обратный прокси для двух других контейнеров.
  2. раскручивает веб-сайт
  3. раскручивает микросервис

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