Como posso fazer o Nginx eliminar solicitações SSL de um domínio errado?

2

Então eu tenho um servidor com um único IP e muitos sites, todos hospedados sob nginx. Aqui está uma redução simplificada muito da minha configuração real:

server {
    listen 80;
    listen 443 ssl;
    server_name ssl.example.com;
    #...
}

server {
    listen 80;
    server_name nossl.example.com;
    #...
}

Se eu me conectar a ssl.example.com:443 , tudo funciona, como esperado.
Se eu me conectar a nossl.example.com:443 , ele tentará veicular o conteúdo de ssl.example.com:443 .

Eu fiz as pazes com o por que isso acontece (é como o ssl + nginx é o mais adequado a um servidor virtual), só preciso parar de enviar conteúdo do site errado.

Faltando a compra de certificados para todos os meus sites (ou a emissão de meus próprios), ou empurrando o site SSL para o seu próprio IP, quais são minhas opções aqui? O nginx pode verificar novamente o domínio para cada solicitação SSL e certificar-se de que corresponda a server_name ?

    
por Oli 03.05.2014 / 12:06

2 respostas

4

Adicione o seguinte servidor virtual:

server {
  listen 443 ssl;
  server_name _;

  ssl on;
  ssl_certificate /path/to/certificate.crt;
  ssl_certificate_key /path/to/certificate.key;

  return 444;
}

Se nenhum host for compatível, o Nginx usará este como último recurso e retornará um erro.

Ele precisa de um certificado SSL para funcionar, mas você pode gerar um desses com uma assinatura muito rapidamente e isso será feito. Isso é melhor do que compartilhar um certificado existente válido de outra forma para outro domínio (o que gera erros de qualquer maneira) porque há menos vazamento.

    
por 03.05.2014 / 12:19
1

Eu costumo pensar que o # 2 é a resposta mais adequada, mas descobri que o seguinte também funciona quando colocado acima do bloco de servidores virtuais não-ssl.

server {
  listen 443;
  server_name .example.com;
  return 444;
}

Não use o sinalizador "ssl".

    
por 31.10.2014 / 05:09

Tags