Nginx na VPS: configuração básica e proxy reverso
Nginx é o servidor web e proxy reverso mais usado em VPS — recebe todo o tráfego nas portas 80 e 443 e direciona para os apps corretos por domínio ou caminho. Com ele você hospeda múltiplos apps na mesma VPS (cada um num subdomínio), adiciona HTTPS e compressão sem alterar o código dos apps.
Instalar o Nginx com Docker
A forma mais prática de rodar Nginx em VPS com Docker é como container, com a configuração montada como volume:
# docker-compose.yml para Nginx como proxy reverso
services:
nginx:
image: nginx:alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
- certbot_conf:/etc/letsencrypt:ro
- certbot_www:/var/www/certbot
networks:
- proxy
networks:
proxy:
name: nginx_proxy # rede compartilhada com os appsProxy reverso: configuração por subdomínio
Crie um arquivo de configuração para cada app no diretório conf.d. Cada arquivo define um bloco server para um domínio:
# nginx/conf.d/n8n.conf
server {
listen 80;
server_name n8n.seudominio.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name n8n.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/n8n.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.seudominio.com.br/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# WebSocket — necessário para n8n, Chatwoot, etc.
location / {
proxy_pass http://n8n:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_read_timeout 300s;
}
}Múltiplos apps na mesma VPS
Cada app tem seu arquivo .conf com um server_name diferente. O Nginx roteia pelo Host header:
# nginx/conf.d/chatwoot.conf
server {
listen 443 ssl;
http2 on;
server_name chat.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/chat.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.seudominio.com.br/privkey.pem;
client_max_body_size 50M; # para upload de anexos
location / {
proxy_pass http://chatwoot_rails:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /cable {
proxy_pass http://chatwoot_rails:3000/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}Performance: gzip e cache de estáticos
Adicione ao nginx.conf principal (ou a um arquivo incluído) para melhorar a performance de todos os apps:
# nginx/conf.d/performance.conf
# Gzip para reduzir tamanho das respostas
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types
text/plain text/css text/xml application/json
application/javascript application/xml+rss
application/atom+xml image/svg+xml
font/woff font/woff2;
# Cache agressivo para assets estáticos
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css 1y;
application/javascript 1y;
~image/ 1y;
font/woff2 1y;
}
expires $expires;
# Limitar tamanho do buffer de proxy (evita erro 502)
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;Recarregar e testar a configuração
Sempre teste a configuração antes de recarregar para evitar downtime:
# Testar sintaxe sem aplicar (dentro do container)
docker compose exec nginx nginx -t
# Se OK, recarregar sem downtime
docker compose exec nginx nginx -s reload
# Ver logs de erro em tempo real
docker compose logs nginx -f
# Testar um virtual host específico
curl -I https://n8n.seudominio.com.br
# Ver qual server_name está respondendo
curl -v https://n8n.seudominio.com.br 2>&1 | grep -E "Server:|< HTTP"
# Verificar headers de segurança
curl -I https://seudominio.com.br | grep -E "Strict|X-Frame|Content-Security"$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.