O Nginx exibe o certificado errado. Dois domínios com redirecionamento

1

Eu tenho dois domínios example.com e example.org . Os dois domínios apontam para o mesmo servidor com um IP estático.

O primeiro arquivo de configuração (para example.com ):

# /etc/nginx/sites-enabled/example.com.conf

# Catchall for all non-existent domains
server {
   return 404;
}

# Should redirect http://example.com to https://example.com
server {
   listen 80;
   server_name example.com;
   return 301 https://$server_name$request_uri;
}

# Should redirect http://www.example.com to https://www.example.com
server {
  listen 80;
  server_name www.example.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name example.com;

  # Using LetsEncrypt certs
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  root /var/www/example.com/;
  index index.html;

}

E aqui está o outro arquivo de configuração

# /etc/nginx/sites-enabled/example.org.conf

# Should redirect http://example.org to https://example.org
server {
   listen 80;
   server_name example.org;
   return 301 https://$server_name$request_uri;
}

# Should redirect http://www.example.org to https://www.example.org
server {
  listen 80;
  server_name www.example.org;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name example.org;

  ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;

  root /var/www/example.org/;
  index index.html;

}

Então, aqui está o problema

http://example.com -> https://example.com ✔
https://example.com ✔
http://www.example.com -> https://www.example.com ✔
https://www.example.com ✔

http://example.org -> https://example.org ✔
https://example.org ✔
http://www.example.org -> https://www.example.org ✗
https://www.example.org ✗

Nos dois últimos casos ( www.example.org ), o certificado de example.com é exibido.

O suporte a SNI está ativado: $ nginx -V => TLS SNI support enabled

O que há de errado com minha configuração?

    
por zarathustra 29.01.2017 / 14:58

1 resposta

2

Você não tem server_name s para as versões seguras de seus domínios ao usar o prefixo www. , portanto, o servidor padrão é usado em cada caso.

Na ausência de um servidor padrão explícito, o primeiro bloco de servidor correspondente à porta apropriada é usado.

Você precisa adicionar as variantes www. à diretiva server_name em seus blocos server seguros ou usar a sintaxe de curinga.

Veja este documento para detalhes.

Por exemplo:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ...
}
    
por 29.01.2017 / 15:06