Como hospedar um site com Nginx e certificado Let's Encrypt (Certbot)

João Guilherme

João Guilherme

Última atualização em Sep 29, 2026

Pré-requisitos: domínio apontado para a VPS e portas 80/443 liberadas no firewall.

1. Instalar o Nginx

sudo apt update && sudo apt install -y nginx

Abra http://IP-DA-VPS: a página de boas-vindas confirma que está rodando.

2. Criar o site

sudo mkdir -p /var/www/seudominio.com
echo "<h1>Funcionou</h1>" | sudo tee /var/www/seudominio.com/index.html
sudo chown -R www-data:www-data /var/www/seudominio.com

sudo nano /etc/nginx/sites-available/seudominio.com:

server {
    listen 80;
    listen [::]:80;
    server_name seudominio.com www.seudominio.com;
    root /var/www/seudominio.com;
    index index.html;
}
sudo ln -s /etc/nginx/sites-available/seudominio.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

3. HTTPS com Certbot

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d seudominio.com -d www.seudominio.com

Informe o e-mail, aceite os termos e escolha redirecionar HTTP para HTTPS. O Certbot edita a configuração, emite o certificado e agenda a renovação (systemctl status certbot.timer). Teste a renovação com sudo certbot renew --dry-run.

4. Aplicação por trás do Nginx (Node, Python, Docker...)

Se a aplicação roda em uma porta local (ex.: 3000), o Nginx faz o proxy:

server {
    listen 80;
    server_name app.seudominio.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;     # websockets
        proxy_set_header Connection "upgrade";
    }
}

Depois rode o certbot --nginx -d app.seudominio.com. Mantenha a aplicação escutando só em 127.0.0.1 para que o único caminho seja pelo Nginx com HTTPS.

PHP

sudo apt install -y php-fpm

No bloco server: index index.php index.html; e

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }

Problemas comuns

  • Certbot falha na validação: o domínio ainda não aponta para a VPS ou a porta 80 está fechada.
  • 502 Bad Gateway: a aplicação não está rodando na porta do proxy_pass.
  • Site mostra a página padrão do Nginx: server_name não bate com o domínio, ou o link em sites-enabled não foi criado.
  • Logs: /var/log/nginx/error.log.