WordPress com HTTPS no Nginx (Let's Encrypt)
Configurar HTTPS no WordPress com Nginx e Let's Encrypt na VPS envolve três passos: gerar o certificado via Certbot, atualizar o bloco server do Nginx para escutar em 443, e configurar o redirect permanente de HTTP para HTTPS. O processo leva menos de 5 minutos e o certificado se renova automaticamente.
Pré-requisito: domínio apontando para a VPS
O Let's Encrypt valida que você controla o domínio verificando um arquivo na porta 80. O DNS deve estar resolvendo para o IP da VPS antes de continuar:
# Verificar resolução DNS (aguardar propagação se acabou de configurar)
dig +short seudominio.com.br
nslookup seudominio.com.br
# Confirmar que a porta 80 está acessível
curl -I http://seudominio.com.brGerar o certificado com Certbot
Com o stack WordPress rodando (Nginx na porta 80), execute o Certbot via Docker usando o método webroot:
cd /opt/wordpress
# Certbot com método webroot
docker compose run --rm certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email seu@email.com \
--agree-tos \
--no-eff-email \
-d seudominio.com.br \
-d www.seudominio.com.br
# Verificar certificado gerado
ls /var/lib/docker/volumes/wordpress_certbot_conf/_data/live/seudominio.com.br/Atualizar o Nginx para HTTPS
Após gerar o certificado, atualize o nginx.conf para aceitar HTTPS e redirecionar HTTP:
# Bloco HTTP — apenas redirect e desafio Certbot
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://seudominio.com.br$request_uri;
}
}
# Bloco HTTPS
server {
listen 443 ssl;
http2 on;
server_name seudominio.com.br www.seudominio.com.br;
root /var/www/html;
index index.php;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
client_max_body_size 64M;
}Recarregar Nginx e corrigir URLs do WordPress
Recarregue o Nginx sem downtime e atualize as URLs do WordPress para HTTPS:
# Recarregar Nginx
docker compose exec nginx nginx -s reload
# Verificar HTTPS
curl -I https://seudominio.com.br
# Atualizar URLs no WordPress via WP-CLI
docker compose exec wordpress wp option update siteurl https://seudominio.com.br --allow-root
docker compose exec wordpress wp option update home https://seudominio.com.br --allow-root
# Substituir URLs antigas no banco (migração HTTP → HTTPS)
docker compose exec wordpress wp search-replace \
'http://seudominio.com.br' 'https://seudominio.com.br' \
--allow-root --skip-columns=guidRenovação automática
Configure a renovação automática do certificado antes que expire (90 dias):
# Crontab do root (crontab -e)
0 3 * * * cd /opt/wordpress && docker compose run --rm certbot renew --quiet && docker compose exec nginx nginx -s reload
# Testar renovação sem aplicar (dry-run)
docker compose run --rm certbot renew --dry-run$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o WordPress em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.