Pré-requisitos: domínio [apontado para a VPS](/hc/vps/articles/como-apontar-seu-dominio-para-a-vps) e portas 80/443 [liberadas no firewall](/hc/vps/articles/como-configurar-o-firewall-da-vps).

## 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`:

```nginx
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:

```nginx
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

```nginx
    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`.
