Eu tinha produção (www.myexample.com) e desenvolvimento (dev.myexample.com) em um único servidor, usando blocos de servidor e diretórios separados, com ambos escutando na porta 80. Funcionou bem.
Agora instalei o certificado SSL e habilitei o modo SSL no arquivo de configuração do site. Ao mesmo tempo mudei a porta de escuta de 80 para 443, então o site não deve responder na porta 80, apenas na porta 443. O site de desenvolvimento ainda está funcionando como estava.
Agora parece que, em vez de um erro, recebo o site de desenvolvimento quando me conecto aohttp://www.meuexemplo.com.
Para corrigir esse problema, adicionei um bloco de servidor "padrão" real (server_name definido como _) e apontando para um diretório que não contém arquivos.
Existe uma maneira melhor? Se eu quiser um site padrão real, não quero que ele seja mostrado para um nome de host conhecido. Suponho que preciso criar um bloco de servidor ouvindo www.myexaple.com:80 e configurá-lo para rejeitar de alguma forma todas as solicitações de página, mas como?
Como posso parar completamente de responder a quaisquer solicitações de um site que não hospedo?
Responder1
É sempre uma boa ideia configurar um servidor padrão com um nome de host inválido, isso garante que clientes sem nenhum campo de cabeçalho de host definido (ou com um host que você não configurou) sejam rejeitados.
server {
listen [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
server_name _;
return 403;
}
server {
listen [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
server_name _;
ssl_certificate certificates/_/pem;
ssl_certificate_key certificates/_/key;
return 403;
}
Como você pode ver, retorno com um código de status 403 Access Forbidden, pois este é o mais adequado para o meu caso de uso (veja o comentário abaixo). Se você simplesmente deseja não retornar absolutamente nada, use o código nginx especial 444.