Como fazer o redirecionamento do NGINX de http para https?

1

Eu quero redirecionar de http para https em um bloco de servidor NGINX.

Seguindo uma resposta em um post relacionado , tentei adicionar outro bloco de servidor no arquivo de configuração NGINX a seguir, mas recebi um aviso 'nome do servidor conflitante', como (presumivelmente) o valor de server_name não inclui o prefixo do protocolo:

server {
    listen 80;
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    return 302 https://sub.domain.co.uk$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    location / {
        root /home/saves/webapps/html/;
        index index.html;
    }
    location /api/ {
        [...]
   }
}
    
por Dave Everitt 20.10.2014 / 16:20

2 respostas

2

O problema é que você configurou dois blocos de servidores escutando SSL na mesma porta com o mesmo nome de servidor e não há como o nginx decidir qual deles escolher nessas condições. Altere para:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    return 302 https://sub.domain.co.uk$request_uri;
}

server {
    listen 443;
    server_name sub.domain.co.uk;

    location / {
        root /home/saves/webapps/html/;
        index index.html;
    }
    location /api/ {
        [...]
   }
}
    
por 20.10.2014 / 16:28
0

Pensei nisso, fiz uma pequena pesquisa e resolvi-o com um bloco de servidores muito mais simples antes do principal, desta resposta :

server {
    listen 80;                            
    location / {
        return 301 https://sub.domain.co.uk;
    }
}

Mas finalmente alterou após os comentários:

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    location / {
        return 301 https://sub.domain.co.uk;
        root /home/saves/webapps/html/;
        index index.html;
    }
    [...]
}

Portanto, agradeço a ambos por suas respostas rápidas e úteis.

    
por 20.10.2014 / 16:33