Artigo gentilmente oferecido por: https://linuxize.com/post/redirect-http-to-https-in-nginx/ 

Se ele for útil doe um café para o autor @linuxize https://linuxize.com/post/redirect-http-to-https-in-nginx/

Neste guia, explicaremos como redirecionar o tráfego HTTP para HTTPS no Nginx.

O "engine x", pronunciado pelo Nginx, é um servidor HTTP e de proxy reverso de código aberto, de alto desempenho e responsável por lidar com a carga de alguns dos maiores sites da Internet.

Se você é desenvolvedor ou administrador de sistemas, é provável que esteja lidando com o Nginx regularmente. Uma das tarefas mais comuns que você provavelmente executará é redirecionar o tráfego HTTP para a versão segura (HTTPS) do seu site.

Ao contrário do HTTP, onde solicitações e respostas são enviadas e retornadas em texto sem formatação, o HTTPS usa TLS / SSL para criptografar a comunicação entre o cliente e o servidor.

Há muitos benefícios no uso de HTTPS sobre HTTP, como:

  • Todos os dados são criptografados nas duas direções. Como resultado, informações confidenciais não podem ser lidas se interceptadas.
  • O Google Chrome e todos os outros navegadores populares marcarão seu site como seguro.
  • O HTTPS permite usar o protocolo HTTP / 2, o que melhora significativamente o desempenho do site.
  • O Google favorece sites HTTPS. Seu site terá uma classificação melhor se veiculado via HTTPS.

O método preferido para redirecionar HTTP para HTTPS no Nginx é configurar um bloco de servidor separado para cada versão do site. Evite redirecionar o tráfego usando a diretiva if , pois isso pode causar um comportamento imprevisível do servidor.

Redirecionar HTTP para HTTPS por site

Para redirecionar um único site para HTTPS, abra o arquivo de configuração do domínio e faça as seguintes alterações:

server { 
    listen 80 ; 
    listen [::]:80 ; 
    server_name linuxize.com www.linuxize.com ; 
    return 301 https://linuxize.com $request_uri ; 
    } 

Vamos dividir o código linha por linha:

  • listen 80 - O bloco do servidor escutará as conexões de entrada na porta 80 para o domínio especificado.
  • server_name linuxize.com www.linuxize.com - Especifica os nomes de domínio do bloco do servidor. Substitua-o pelo seu nome de domínio.
  • return 301 https://linuxize.com$request_uri - Redirecione o tráfego para a versão HTTPS do site. A variável $request_uri é o URI da solicitação original completo, incluindo os argumentos.

Normalmente, você também desejará redirecionar a versão www HTTPS do site para não www ou vice-versa. A maneira recomendada de fazer o redirecionamento é criar um bloco de servidor separado para as versões www e não www.

Por exemplo, para redirecionar as solicitações de HTTPS www para não www, você usaria a seguinte configuração:

 server { 
    listen 80 ;    
    listen[::]:80;     server_namelinuxize.comwww.linuxize.com;     return301https://linuxize.com$request_uri;
}     server{     listen443sslhttp2;     server_namewww.linuxize.com;     # . . . other codereturn301https://linuxize.com$request_uri;}server{listen443sslhttp2;server_namelinuxize.com;# . . . other code}

Redirecionar todos os sites para HTTPS

Se todos os sites hospedados no servidor estiverem configurados para usar HTTPS, e você não desejar criar um bloco de servidor HTTP separado para cada site, poderá criar um único bloco de servidor HTTP abrangente. Este bloco redirecionará todas as solicitações HTTP para os blocos HTTPS apropriados.

Para criar um único bloco HTTP abrangente que redirecionará os visitantes para a versão HTTPS do site, abra o arquivo de configuração do Nginx e faça as seguintes alterações:

 server { listen 80 default_server ; listen [::]:80 default_server ; server_name _ ; return 301 https:// $host$request_uri ; } 

Vamos analisar o código linha por linha:

  • listen 80 default_server - Define este bloco do servidor como o bloco padrão (catch-all) para todos os domínios não correspondentes.
  • server_name _ - _ é um nome de domínio inválido que nunca corresponde a nenhum nome de domínio real.
  • return 301 https://$host$request_uri - Redireciona o tráfego para o bloco de servidor HTTPS correspondente com o código de status 301 (Movido permanentemente). A variável $host mantém o nome de domínio da solicitação.

Por exemplo, se o visitante abrir http://example.com/page2 no navegador, o Nginx redirecionará a solicitação para https://example.com/page2 .

Se possível, prefira criar um redirecionamento por domínio em vez de um redirecionamento global de HTTP para HTTPS.

Conclusão

Depois de instalar um certificado SSL em seu site, você deve redirecionar o tráfego HTTP para HTTPS.

No Nginx, a maneira preferida de redirecionar o HTTP para HTTPS é criar blocos de servidor separados e executar o redirecionamento 301.