Configuração HTTPS Nginx redireciona para URL com falha

1

Eu tenho o Nginx trabalhando com o gunicorn como um servidor upstream. Eu estou tentando configurar o site para usar HTTPS e forçar todas as solicitações HTTP para usar SSL.

Aqui está minha configuração nginx em /etc/nginx/conf.d/site.conf :

server {
       listen         80;
       server_name    _;
       return         301 https://$server_name$request_uri;
}



server {
    listen       443 ssl;
    server_name  _;

    ssl_certificate      /etc/ssl/nginx/cert_chain.crt;
    ssl_certificate_key  /etc/ssl/nginx/private.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    add_header Strict-Transport-Security "max-age=31536000";

    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

}

Depois de instalar esta configuração, sempre que eu for: https://example.com/page.html , em seguida, retorna a página conforme o esperado.

Mas quando eu uso: https://example.com/ , o navegador redireciona para: https: //_/

Esse problema também acontece quando eu uso a versão HTTP do site em www.example.com

Como posso reescrever a configuração acima para que ela funcione corretamente?

    
por conquester 02.11.2016 / 01:52

1 resposta

2

Sua configuração especifica que as solicitações HTTP devem ser redirecionadas para https://_/ .

       server_name    _;
       return         301 https://$server_name$request_uri;

Porque server_name está definido como _ , é o que é usado para $server_name .

A variável que você deve usar em vez de $server_name é $host . Isso sempre terá algo sensato com base no que o navegador solicitou (desde que o navegador solicite algo sensato).

Idealmente, no entanto, um bloco server com server_name _; não deve exibir nada além de uma página de erro. Em vez disso, você deve ter server blocos para seus nomes de domínio reais. Essa configuração impede o acesso não intencional ao seu servidor por meio de endereços IP simples ou nomes de host que não estejam configurados no nginx ou em seu aplicativo da Web.

    
por 02.11.2016 / 02:29