¿Cómo ejecuto dos servidores web Nginx en la misma máquina?

¿Cómo ejecuto dos servidores web Nginx en la misma máquina?

Quiero alojar un sitio web y ejecutar un proyecto de microservicios en mi propio servidor.

  1. El sitio web se ejecutará con el servidor web Nginx. El dominio del sitio web se verá así sampleapp.com y este sitio web utilizará freessl.

  2. Uno de los servicios del proyecto Microservicio se ejecutará con el servidor web Nginx como servicio en un contenedor acoplable. Este servicio utiliza subdominios de mi sampleapp.com como api-dev.sampleapp.com y esos subdominios también deberían funcionar con SSL.

Al intentar implementar servicios con Docker-compose, aparece el siguiente error:

[advertencia] 1#1: nombre de servidor conflictivo "api-dev.sample.com" en 0.0.0.0:80, ignorado

La principal preocupación es ¿cómo puedo configurar SSL dentro de la ventana acoplable? 443 es el puerto predeterminado para HTTPS.

El archivo de configuración Nginx de mi microservicio es el siguiente.

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;
  }
}

El archivo de configuración de Nginx del sitio web es el siguiente

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;

    }

}

Soy desarrollador, no administrador de sistemas, por lo que me cuesta encontrar la mejor manera de hacerlo.

Respuesta1

Una de las posibles soluciones aquí es ejecutar 3 contenedores acoplables con Nginx.

  1. escucha en los puertos 80 y 443, descarga ssl y funciona como proxy inverso para otros dos contenedores.
  2. hace girar el sitio web
  3. hace girar el microservicio

información relacionada