Nginx — Proxy Reverso e SSL
Instalação
sudo apt install -y nginx
sudo systemctl enable --now nginx
Proxy reverso para uma aplicação
Encaminha o tráfego da porta 80 para uma app rodando em localhost:3000 (Node, Python, Docker etc.).
# /etc/nginx/sites-available/app
server {
listen 80;
server_name app.exemplo.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-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Ativar o site:
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t # testa a sintaxe
sudo systemctl reload nginx
HTTPS grátis com Let’s Encrypt (Certbot)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d app.exemplo.com
O Certbot edita o server automaticamente e configura a renovação. Teste a renovação:
sudo certbot renew --dry-run
Servir arquivos estáticos
server {
listen 80;
server_name site.exemplo.com;
root /var/www/site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Load balancing (vários backends)
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
# least_conn; # ou ip_hash;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Comandos úteis
sudo nginx -t # testar config
sudo systemctl reload nginx # aplicar sem derrubar conexões
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Boas práticas
nginx -tantes de todo reload.- Redirecione HTTP → HTTPS (o Certbot faz isso).
- Headers de segurança (
X-Frame-Options,Strict-Transport-Security). - Rate limiting (
limit_req) para endpoints sensíveis.
Veja também: systemd & cron · Docker