Base de Conhecimento

Redirecionar HTTP para HTTPS: passo a passo no Nginx

  • redirecionar http para https, https, nginx, certbot, wordpress, vps
  • Usuários acharam útil: 0

Veja como redirecionar HTTP para HTTPS no Nginx da sua VPS: bloco 301, teste com curl, endereços do WordPress, links antigos no banco e conteúdo misto.

Por Redação Eleven Host · @robson.direitodigital · 28 de outubro de 2026 · 7 min de leitura

Arte da Eleven Host: janela de terminal com o título: Redirecionar HTTP para HTTPS: passo a passo no Nginx

Capa da Redação Eleven Host para o guia: Redirecionar HTTP para HTTPS: passo a passo no Nginx Arte: Eleven Host

Para redirecionar http para https, com o certificado já instalado, crie no Nginx um bloco na porta 80 que devolve o código 301 para o endereço https, mantendo o caminho. No WordPress, troque também os endereços do site para https.

Este guia é para quem tem um site numa VPS com Nginx e já abre o endereço com https, mas ainda acessa a versão http. A ordem é a do trabalho real: conferir o certificado, criar o redirecionamento, testar e, no WordPress, corrigir os endereços e os links antigos. Os nomes seudominio.com.br e usuario são exemplos. Troque pelos seus. Se o domínio ainda não aponta para a VPS, comece por Apontar domínio para VPS: passo a passo com registro A.

Por que usar o redirecionamento 301

Segundo a MDN, o código 301 Moved Permanently indica que o recurso foi movido permanentemente para o endereço informado no cabeçalho Location. O navegador segue o redirecionamento e os motores de busca atualizam os links para o endereço novo.

A MDN recomenda o 301 apenas para pedidos GET e HEAD, e indica o 308 Permanent Redirect quando for preciso manter o método POST. Para um site comum, em que o visitante abre páginas, o 301 atende.

Em linguagem simples: quem digitar http://seudominio.com.br é levado para https://seudominio.com.br sem fazer nada.

Antes de começar: o certificado precisa estar funcionando

O redirecionamento só faz sentido se o site já tem certificado e responde em https. Um dos caminhos é o Certbot, que tem instruções oficiais para Nginx. A instalação pelo snap é esta:

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Depois, escolha uma das duas formas. A primeira obtém o certificado e ajusta o Nginx:

sudo certbot --nginx

A segunda só obtém o certificado, e você edita o Nginx por conta própria:

sudo certbot certonly --nginx

A documentação diz que os sites configurados com o Certbot podem redirecionar automaticamente do HTTP para o HTTPS. Por isso, depois de rodar o comando, confira se o redirecionamento já existe antes de criar outro. Dois redirecionamentos juntos podem causar o loop descrito mais abaixo.

Para renovar, os pacotes trazem um timer ou cron que renova o certificado antes de vencer. Teste a renovação com:

sudo certbot renew --dry-run

Para conferir o resultado, abra https://seudominio.com.br no navegador e veja o cadeado.

Só crie o redirecionamento depois de ver o site abrindo em https. Redirecionar para um endereço sem certificado pode deixar o visitante diante de um aviso de segurança do navegador.

O bloco do Nginx que redireciona

Abra o arquivo de configuração do seu site no Nginx e confira se já existe um bloco server na porta 80. Se existir, ajuste esse bloco em vez de criar outro. O bloco que redireciona fica assim:

server {

listen 80;

listen [::]:80;

server_name seudominio.com.br www.seudominio.com.br;

return 301 https://$host$request_uri;

}

Segundo a documentação do Nginx, a variável $host é o nome do host do pedido e a variável $request_uri é o endereço original completo, com os parâmetros. A diretiva return com o código 301 e uma URL interrompe o processamento e manda o redirecionamento.

O bloco listen 443 ssl, com o certificado, continua separado. Depois de salvar, teste a sintaxe e recarregue:

sudo nginx -t

sudo systemctl reload nginx

Se o nginx -t apontar erro, corrija a linha indicada antes de recarregar.

Com ou sem www

O bloco acima aceita as duas versões do nome e preserva a que o visitante digitou. Para mandar tudo para uma só versão, troque $host pelo nome escolhido:

return 301 https://seudominio.com.br$request_uri;

O $request_uri mantém o caminho e os parâmetros. Por exemplo, /contato?origem=x continua igual no https.

Para o https://www.seudominio.com.br também ir para a versão sem www, é preciso um bloco listen 443 ssl para o www, e o certificado tem de incluir o www. Sem isso, o navegador pode mostrar um aviso antes de o redirecionamento acontecer.

Testar o redirecionamento

No terminal, peça só os cabeçalhos do endereço http:

curl -I http://seudominio.com.br

A saída deve mostrar 301 Moved Permanently e uma linha Location: https://... com o endereço novo. Se aparecer outro código, volte ao bloco do Nginx e confira o server_name.

Quer um servidor para hospedar o seu site? Os planos de VPS são a partir de R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Ver planos de VPS

No WordPress: trocar os endereços para https

Com o Nginx redirecionando, falta avisar o WordPress. Segundo a documentação, em Configurações > Geral, mude os campos "Endereço do WordPress (URL)" e "Endereço do site (URL)" para https.

Outra forma é fixar os endereços no wp-config.php. Nesse caso, os campos ficam travados na tela Geral:

define( 'WP_HOME', 'https://seudominio.com.br' );

define( 'WP_SITEURL', 'https://seudominio.com.br' );

Para exigir que o painel e o login usem SSL, a documentação do WordPress indica esta linha. Ela precisa do SSL funcionando antes:

define( 'FORCE_SSL_ADMIN', true );

Links antigos com http dentro dos posts

Posts e páginas antigos podem ter links e imagens com http:// gravados no banco. A documentação do WordPress avisa que trocar o endereço direto no banco pode quebrar dados serializados, e orienta usar uma ferramenta que respeite isso, como o WP-CLI.

Faça antes o backup do banco, como no guia Backup MySQL com mysqldump: como fazer e restaurar. Depois, dentro da pasta do site, rode:

wp search-replace 'http://seudominio.com.br' 'https://seudominio.com.br' --skip-columns=guid

A opção --skip-columns=guid deixa a coluna guid de fora, porque a documentação manda não mexer nela.

Conteúdo misto: o cadeado que não aparece

Conteúdo misto, segundo a MDN, é a página carregada em https que puxa algum recurso por http. Os navegadores atualizam sozinhos imagem, vídeo e áudio de http para https e bloqueiam o resto, como scripts, folhas de estilo, fontes e iframes.

Para achar o recurso, abra o console do navegador, nas ferramentas do desenvolvedor: ele mostra os avisos de conteúdo misto. A MDN indica como corrigir:

  • servir os recursos do seu domínio por https;
  • trocar as referências para https ou para links relativos;
  • para recursos de outros sites, usar a versão https quando ela existir.

A MDN cita ainda uma opção extra, o cabeçalho Content-Security-Policy: upgrade-insecure-requests, que atualiza os pedidos para https.

Loop de redirecionamento

O erro de "redirecionamentos demais" acontece quando dois lugares redirecionam ao mesmo tempo, como uma regra no Nginx somada a um plugin ou a uma configuração no site, ou a um proxy na frente.

A documentação do WordPress cita um caso: com um proxy reverso cuidando do SSL, o WordPress pode entrar em loop infinito se não reconhecer o cabeçalho X-Forwarded-Proto. O guia Nginx proxy reverso: como configurar na sua VPS mostra a configuração do proxy. Deixe só um lugar responsável pelo redirecionamento.

Checklist do HTTPS

  • O site abre em https com o cadeado.
  • Conferi se o Certbot já criou um redirecionamento antes de criar o meu.
  • O bloco da porta 80 usa return 301 https://$host$request_uri;.
  • Rodei o nginx -t e recarreguei o Nginx.
  • O curl -I mostra 301 e a linha Location com https.
  • Troquei os endereços no WordPress para https.
  • Fiz o backup do banco antes do wp search-replace.
  • Abri o console do navegador e não vi avisos de conteúdo misto.

Já pensou no endereço do seu site? Busque o nome e registre o seu domínio na Eleven Host. Registrar domínio

Perguntas frequentes

Qual código usar para redirecionar de http para https?

O 301 Moved Permanently, que indica uma mudança permanente de endereço. A MDN indica o 308 quando for preciso manter o método POST.

O Certbot já cria o redirecionamento?

A documentação diz que os sites configurados com o Certbot podem redirecionar automaticamente do HTTP para o HTTPS. Confira o arquivo do site antes de criar outro bloco.

O redirecionamento mantém o caminho da página?

Sim, quando você usa $request_uri. Ele guarda o caminho e os parâmetros do endereço original.

Por que o navegador diz "redirecionamentos demais"?

Pode haver dois lugares redirecionando ao mesmo tempo, ou o WordPress atrás de um proxy não reconhece o cabeçalho X-Forwarded-Proto. Deixe só uma regra ativa.

Esta resposta lhe foi útil?

Artigos Relacionados