Marcos Max

Wiki Max - TI

View on GitHub

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

Veja também: systemd & cron · Docker