serve dois aplicativos diferentes (dois domínios) no mesmo endereço IP com nginx

1

Estou tentando configurar o nginx para exibir dois sites diferentes no mesmo endereço IP, e estou tendo problemas para fazer isso funcionar.

server_tokens off;  # hide nginx version

# site1.com app is served from localhost:3006
# site2.com is served from a socket:
upstream puma {
  server unix:/var/www/site1/sockets/puma.sock fail_timeout=0;
}

# Site 1 should be served over HTTP
server {
  listen   80;
  server_name site1.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 $host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://localhost:3006/;
  }

  access_log /var/www/site2/log/site1.nginx.access.log;
  error_log  /var/www/site2/log/site1.nginx.error.log;
}

# Site 2 over HTTP should redirect to site 2 HTTPS
server {
  listen 80;
  server_name site2.com;
  return 301 https://$host$request_uri;
}

# Site 2 should be served over HTTPS
server {
  listen 443 ssl;

  ssl_certificate /etc/letsencrypt/live/site2.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/site2.com/privkey.pem;

  access_log /var/www/site2/log/nginx.access.log;
  error_log  /var/www/site2/log/nginx.error.log;

  # if the maintenance file exists, we return it
  if (-f /var/www/site2/public/system/maintenance.html) {
    return 503;
  }

  error_page 503 @maintenance;
  location @maintenance {
    rewrite ^(.*)$ /system/maintenance.html last;
    break;
  }

  # .well-known is for letsencrypt certificates
  location ~ ^/(static|assets|files|system|.well-known)/ {
    root /var/www/site2/public;
  }

  location / {
    proxy_pass http://puma;

    # Keep the original host and pass it to the Rails app,
    # so it can handle differently requests from different
    # subdomains.
    # If proxy_set_header is not used, Rails will only see
    # 'puma' as host of requests.
    proxy_set_header Host $host;
    # More headers are needed by rack, for various reasons,
    # including security checks
    # see https://github.com/rails/rails/issues/22965
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Ssl on;  # optional
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Host $host;
  }
}

Atualmente, o site2.com funciona bem, mas as solicitações de site1.com resultam em um erro de "certificado mal configurado".

Todas as solicitações para o domínio site1.com não devem ser manipuladas pela primeira diretiva server ?

    
por vmarquet 06.10.2018 / 23:38

1 resposta

0

Parte do erro foi que eu estava usando a imagem do docker nginx, com um Dockerfile como:

FROM nginx

COPY nginx.prod.conf /etc/nginx/conf.d/default.conf

Eles dizem para usar sudo docker exec [name] nginx -s reload para recarregar o nginx dentro da janela de encaixe, mas isso não importa o novo conf dentro da janela de encaixe, ele apenas recarrega a mesma ...

Minha solução: não use o docker. No meu caso, foi apenas uma nova camada de complexidade e propenso a erros. Claro que o YMMV, docker pode ser realmente útil se gerenciado adequadamente pela sua ferramenta de implementação.

    
por 07.10.2018 / 12:03

Tags