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_namenão bate com o domínio, ou o link emsites-enablednão foi criado. - Logs:
/var/log/nginx/error.log.