Redirecionar HTTP para HTTPS: passo a passo no Nginx
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

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 -te recarreguei o Nginx. - O
curl -Imostra 301 e a linhaLocationcom 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.