nginx ignora https para todos os domínios, exceto um

1

Recentemente, configurei um VPS com alguns sites sendo executados nele (todos usando domínios diferentes) usando nginx para solicitações de proxy para o aplicativo correto.

Tenho um certificado SSL válido para um desses domínios, por isso, configurei um http- > https direct para isso:

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;

  ssl_certificate ..... (etc)
}

Para os outros domínios, apenas escuto na porta 80 e obviamente não configuro os certificados SSL. Embora todos os domínios estejam acessíveis e o redirecionamento HTTPS funcione conforme o esperado para o domínio principal, notei que quando carrego um dos outros domínios (sem certificado SSL) por HTTPS, o nginx está exibindo o site errado, em vez de ... não aceitando a conexão, eu esperaria?

Eu tentei adicionar uma configuração padrão antes de carregar os sites disponíveis:

server {
  listen 80;
  listen 443 ssl;
  return 444;
}

O que me dá o comportamento esperado, exceto pelo fato de meu domínio principal não estar mais disponível em HTTPS (embora o redirecionamento HTTP- > HTTPS ainda esteja funcionando).

Isso é provavelmente algo estúpido e / ou não estou entendendo corretamente o modo como o nginx lida com a configuração, mas não tenho idéia de onde o problema está exatamente. Ajuda?

    
por Lapixx 02.12.2014 / 11:31

1 resposta

1

Esse é o comportamento esperado.

Você está usando vhosts em um único endereço IP em que você ouve HTTP e HTTPs. Portanto, o servidor que manipula o SSL está agindo como o padrão para tudo que vai para essa porta 443.

Você não poderá recusar o handshake SSL, mas depois que ele for concluído, você poderá proibir outras solicitações HTTP que não estejam segmentando um domínio específico, adicionando um bloco de servidor catch-all separado, retornando o código especial n54x.

A solução genérica é ter um único IP para o domínio que deve suportar HTTP e HTTPS e tratar todos os outros HTTP vhost em outro IP.

    
por 02.12.2014 / 15:50

Tags