nginx vai para o site errado quando o site solicitado não está escutando na porta 80

2

Eu tive produção (www.myexample.com) e desenvolvimento (dev.myexample.com) em um único servidor, usando blocos de servidores e diretórios separados, com ambos ouvindo na porta 80. Isso funcionou bem.

Agora eu 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, portanto, o site não deve responder na porta 80, apenas na porta 443. O site de desenvolvimento ainda está sendo executado como estava.

Agora, parece que, em vez de um erro, eu recebo o site de desenvolvimento quando me conecto ao link .

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. Eu estou supondo que eu tenho que criar um bloco de servidor ouvindo fr www.myexaple.com:80 e configurá-lo para de alguma forma rejeitar todas as solicitações de página, mas como?

Como posso parar completamente de responder a qualquer solicitação de um site que eu não hospedo?

    
por Johan 03.05.2015 / 20:18

1 resposta

2

É sempre uma boa idéia configurar um servidor padrão com um nome de host inválido, isso garante que os clientes sem qualquer conjunto de campo de cabeçalho do host (ou com um host que você não tenha configurado) 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;
}

https://github.com/Fleshgrinder/nginx-configuration

Como você pode ver, eu retorno com um código de status 403 Proibido para Acesso, já que este é o mais apropriado para o meu caso de uso (veja o comentário abaixo). Se você simplesmente quer devolver absolutamente nada, use o código especial nginx 444.

    
por 04.05.2015 / 12:20

Tags