15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
01.11.2024

Como Redirecionar HTTP para HTTPS no Linux com Nginx (Guia Completo)

Proteger seu website com HTTPS não é mais opcional — é um requisito fundamental para proteger dados do usuário, manter confiança e alcançar rankings fortes em SEO. Mecanismos de busca como Google penalizam ativamente sites HTTP não criptografados, enquanto navegadores modernos os marcam como "Não Seguro." Redirecionar todo o tráfego HTTP para HTTPS garante que cada visitante acesse a versão criptografada do seu site automaticamente, sem qualquer intervenção manual.

Este guia abrangente o orienta por todo o processo: entender a diferença entre HTTP e HTTPS, instalar um certificado SSL gratuito via Let's Encrypt, configurar um redirecionamento permanente 301 no Nginx e verificar se tudo funciona corretamente no seu servidor Linux.

Índice

  1. HTTP vs. HTTPS: Qual é a Diferença?
  2. Pré-requisitos
  3. Passo 1: Instalar um Certificado SSL com Let's Encrypt
  4. Passo 2: Configurar Nginx para Redirecionar HTTP para HTTPS
  5. Passo 3: Testar Sua Configuração Nginx
  6. Passo 4: Recarregar Nginx para Aplicar Alterações
  7. Passo 5: Verificar se o Redirecionamento Está Funcionando
  8. Problemas Comuns e Resolução de Problemas
  9. Conclusão

1. HTTP vs. HTTPS: Qual é a Diferença? {#http-vs-https}

Antes de mergulhar na configuração, é importante entender por que esse redirecionamento é importante.

HTTP (Hypertext Transfer Protocol)

HTTP é o protocolo fundamental usado para transmitir dados entre um navegador web e um servidor. No entanto, ele transmite todos os dados em texto simples, significando que qualquer informação — credenciais de login, detalhes de pagamento, dados pessoais — pode ser interceptada por atacantes usando um ataque man-in-the-middle (MITM). HTTP não oferece criptografia, autenticação ou garantias de integridade de dados.

HTTPS (HTTP Secure)

HTTPS é a extensão segura do HTTP. Ele envolve o protocolo HTTP padrão dentro de criptografia SSL/TLS, criando um túnel criptografado entre o cliente e o servidor. Isso garante:

  • Confidencialidade — Os dados não podem ser lidos por terceiros em trânsito.
  • Integridade — Os dados não podem ser alterados durante a transmissão.
  • Autenticação — Os usuários podem verificar se estão se comunicando com o servidor legítimo.
  • Vantagem de SEO — Google usa HTTPS como sinal de ranking, dando aos sites seguros uma vantagem mensurável.
  • Confiança do Navegador — Chrome, Firefox e Edge exibem um ícone de cadeado para sites HTTPS e um aviso "Não Seguro" para sites HTTP.

O resultado final: executar um website sem HTTPS no ambiente atual é um risco sério de segurança e negócios.

2. Pré-requisitos {#prerequisites}

Antes de seguir este guia, certifique-se de que você tem o seguinte em vigor:

  • Um servidor Linux (Ubuntu 20.04/22.04, Debian 11/12 ou similar) executando Nginx
  • Um nome de domínio registrado apontado para o endereço IP do seu servidor
  • Acesso root ou sudo ao seu servidor
  • Familiaridade básica com a linha de comando Linux

Se você está procurando um ambiente de servidor confiável para hospedar seu website, VPS Hosting da AlexHost oferece planos VPS Linux totalmente gerenciados e não gerenciados otimizados para aplicações web, com armazenamento SSD e rede de alta disponibilidade.

Você também precisará de um certificado SSL válido. Este guia usa o certificado gratuito Let's Encrypt via Certbot. Se você precisar de um certificado de validação estendida (EV) ou validado por organização (OV) para uso comercial, considere explorar Certificados SSL da AlexHost.

3. Passo 1: Instalar um Certificado SSL com Let's Encrypt {#install-ssl}

Let's Encrypt é uma autoridade de certificação gratuita, automatizada e aberta. Certbot é o cliente oficial que automatiza o processo de obtenção e renovação de certificados SSL/TLS do Let's Encrypt e configura seu servidor web.

Instalar Certbot e o Plugin Nginx

Atualize seu índice de pacotes e instale Certbot junto com o plugin Nginx:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Obter e Instalar Seu Certificado SSL

Execute Certbot com a flag --nginx para obter automaticamente um certificado e configurar Nginx para usá-lo:

sudo certbot --nginx -d example.com -d www.example.com

Substitua example.com pelo seu nome de domínio real. Certbot irá:

  1. Verificar a propriedade do domínio via um desafio ACME
  2. Obter um certificado assinado do Let's Encrypt
  3. Modificar automaticamente sua configuração Nginx para habilitar HTTPS na porta 443
  4. Opcionalmente configurar redirecionamento automático de HTTP para HTTPS (você pode pular esta etapa no Certbot e configurá-la manualmente conforme mostrado abaixo para controle total)

Habilitar Renovação Automática de Certificado

Certificados Let's Encrypt expiram a cada 90 dias. Certbot instala um timer systemd ou trabalho cron para lidar com renovações automaticamente. Verifique se está ativo:

sudo systemctl status certbot.timer

Você também pode executar um teste de renovação de teste seco:

sudo certbot renew --dry-run

4. Passo 2: Configurar Nginx para Redirecionar HTTP para HTTPS {#configure-nginx}

Com seu certificado SSL instalado, você agora precisa configurar Nginx para redirecionar permanentemente todo o tráfego HTTP (porta 80) para HTTPS (porta 443). Isso é feito usando um redirecionamento 301 Moved Permanently, que é o tipo de redirecionamento correto para SEO — ele passa equidade de link para a versão HTTPS de suas páginas.

Abrir Seu Arquivo de Configuração do Bloco do Servidor Nginx

As configurações do site Nginx são normalmente armazenadas em /etc/nginx/sites-available/. Abra o arquivo de configuração para seu domínio:

sudo nano /etc/nginx/sites-available/example.com

Configurar o Bloco de Redirecionamento de HTTP para HTTPS

Seu arquivo de configuração conterá um ou mais blocos server. Localize o bloco que escuta na porta 80 (HTTP) e substitua ou atualize-o com a seguinte regra de redirecionamento:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Permanently redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}

Seu bloco de servidor HTTPS (porta 443), que Certbot provavelmente configurou automaticamente, deve ser semelhante a isto:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/example.com/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

> Por que usar return 301 em vez de rewrite?

> A diretiva return 301 é mais rápida e eficiente do que uma regra rewrite. Ela retorna imediatamente a resposta de redirecionamento sem exigir que Nginx processe blocos de localização adicionais, reduzindo a sobrecarga do servidor e melhorando o tempo de resposta.

Entender a Diretiva de Redirecionamento

ComponenteExplicação
listen 80Nginx escuta conexões de entrada na porta HTTP 80
listen [::]:80Habilita suporte IPv6 na porta 80
server_nameDefine para quais nomes de domínio este bloco se aplica
return 301Emite um redirecionamento permanente (melhor para SEO)
https://$hostPreserva o nome de host original no redirecionamento
$request_uriPreserva o caminho URI completo original e a string de consulta

5. Passo 3: Testar Sua Configuração Nginx {#test-nginx}

Nunca recarregue ou reinicie Nginx sem testar sua configuração primeiro. Um erro de sintaxe em seu arquivo de configuração fará com que Nginx falhe ao iniciar, levando seu website offline.

Execute o teste de configuração Nginx integrado:

sudo nginx -t

Um teste bem-sucedido produz a seguinte saída:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se você vir algum erro, revise cuidadosamente a saída. Nginx indicará o arquivo e número de linha onde o problema foi detectado. Problemas comuns incluem:

  • Ponto-e-vírgula ausentes no final das diretivas
  • Chaves não fechadas {}
  • Caminhos de arquivo incorretos para certificados SSL
  • Entradas duplicadas server_name

Corrija quaisquer erros relatados antes de prosseguir.

6. Passo 4: Recarregar Nginx para Aplicar Alterações {#reload-nginx}

Assim que o teste de configuração passar, recarregue Nginx para aplicar suas alterações. Usar reload em vez de restart é preferido porque aplica a nova configuração graciosamente sem descartar conexões ativas:

sudo systemctl reload nginx

Para confirmar que Nginx está funcionando corretamente após o recarregamento:

sudo systemctl status nginx

Você deve ver active (running) na saída.

7. Passo 5: Verificar se o Redirecionamento Está Funcionando {#verify-redirect}

Com Nginx recarregado, é hora de confirmar que o redirecionamento está funcionando corretamente.

Método 1: Teste do Navegador

  1. Abra seu navegador web.
  2. Navegue para http://example.com (usando HTTP, não HTTPS).
  3. Observe que o navegador o redireciona automaticamente para https://example.com.
  4. Confirme que o ícone de cadeado aparece na barra de endereços, indicando uma conexão SSL válida.

Método 2: Teste de Linha de Comando com curl

Use curl com a flag -I para buscar apenas os cabeçalhos de resposta HTTP sem baixar o corpo da página:

curl -I http://example.com

Um redirecionamento configurado corretamente produz a seguinte resposta:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-alive

Indicadores-chave para verificar:

  • Código de status 301 Moved Permanently — Confirma que um redirecionamento permanente está em vigor.
  • Location: https://example.com/ — Confirma que o tráfego está sendo redirecionado para a versão HTTPS.

Método 3: Verificador de Redirecionamento Online

Você também pode usar ferramentas online gratuitas como redirect-checker.org ou httpstatus.io para rastrear a cadeia de redirecionamento completa e confirmar que não há loops de redirecionamento ou saltos desnecessários.

8. Problemas Comuns e Resolução de Problemas {#troubleshooting}

Loop de Redirecionamento

Sintoma: Navegador exibe erro "Muitos redirecionamentos".

Causa: Seu bloco de servidor HTTPS também está acionando um redirecionamento de volta para HTTP, criando um loop infinito.

Solução: Certifique-se de que a diretiva return 301 existe apenas no bloco de servidor HTTP (porta 80), não no bloco HTTPS (porta 443).

Avisos de Conteúdo Misto

Sintoma: O ícone de cadeado mostra um aviso mesmo após o redirecionamento estar funcionando.

Causa: Suas páginas HTML ainda fazem referência a recursos HTTP (imagens, scripts, folhas de estilo) usando URLs http://.

Solução: Atualize todos os URLs de recursos internos para usar https:// ou URLs relativas ao protocolo (//). Use um plugin como Really Simple SSL para sites WordPress.

Certificado SSL Não Encontrado

Sintoma: Nginx falha ao iniciar com um erro sobre arquivos de certificado ausentes.

Causa: Os caminhos especificados em ssl_certificate e ssl_certificate_key não correspondem aos locais reais dos arquivos de certificado.

Solução: Verifique os caminhos do certificado com:

sudo ls /etc/letsencrypt/live/example.com/

Renovação do Certbot Falha

Sintoma: A renovação automática falha com um erro de conexão.

Causa: A porta 80 pode estar bloqueada por um firewall, impedindo que o desafio HTTP-01 do Let's Encrypt seja concluído.

Solução: Certifique-se de que a porta 80 está aberta em seu firewall:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

9. Conclusão {#conclusion}

Redirecionar HTTP para HTTPS no seu servidor Linux usando Nginx é uma tarefa de configuração simples, mas criticamente importante. Ao implementar um redirecionamento permanente 301, você garante que cada visitante — independentemente de como acessar seu site — seja automaticamente servido com a versão criptografada e segura. Isso protege dados sensíveis do usuário, constrói confiança do visitante, satisfaz requisitos de segurança do navegador moderno e oferece um benefício de SEO mensurável.

Para recapitular os passos-chave cobertos neste guia:

  1. Instale Certbot e obtenha um certificado SSL gratuito do Let's Encrypt.
  2. Configure o bloco de servidor HTTP Nginx com um redirecionamento return 301 para HTTPS.
  3. Teste sua configuração com sudo nginx -t antes de aplicar alterações.
  4. Recarregue Nginx com sudo systemctl reload nginx.
  5. Verifique o redirecionamento usando seu navegador,
15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar