Nginx como proxy reverso na VPS
Nginx como proxy reverso é a arquitetura padrão para servir aplicações na VPS — ele recebe as requisições HTTP/HTTPS, roteia para o processo da aplicação (Node.js, Python, etc.) e devolve a resposta ao cliente. Isola a aplicação da internet, centraliza SSL e permite hospedar múltiplos serviços no mesmo servidor.
Instalar e estruturar o Nginx
Use o repositório oficial do Nginx para ter a versão mais recente:
# Instalar Nginx do repositório oficial
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update && sudo apt install -y nginx
# Verificar versão
nginx -v
sudo systemctl enable nginx
# Estrutura de diretórios:
# /etc/nginx/nginx.conf — config principal
# /etc/nginx/conf.d/ — configs adicionais (carregadas automaticamente)
# /etc/nginx/sites-available/ — configs de sites (estilo Debian)
# /etc/nginx/sites-enabled/ — symlinks para sites ativos
# /var/log/nginx/access.log — log de acesso
# /var/log/nginx/error.log — log de erros
# Testar configuração antes de recarregar:
sudo nginx -t
# Recarregar sem downtime:
sudo nginx -s reloadConfiguração de proxy reverso para Node.js
Arquivo de configuração completo para rotear tráfego para uma aplicação Node.js:
# /etc/nginx/conf.d/minha-api.conf
upstream minha_api {
server 127.0.0.1:3000;
keepalive 64; # reutilizar conexões TCP com o backend
}
server {
listen 80;
server_name api.seudominio.com.br;
# Tamanho máximo do corpo da requisição
client_max_body_size 50M;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
location / {
proxy_pass http://minha_api;
proxy_http_version 1.1;
# Headers essenciais para o backend
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_set_header Connection ""; # necessário para keepalive
# Não cachear respostas da API por padrão
proxy_buffering off;
}
location /health {
proxy_pass http://minha_api;
access_log off; # não logar health checks
}
}Múltiplos serviços no mesmo servidor
Hospedar diferentes aplicações em subdomínios distintos:
# /etc/nginx/conf.d/api.conf
server {
listen 80;
server_name api.seudominio.com.br;
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;
}
}
# /etc/nginx/conf.d/app.conf
server {
listen 80;
server_name app.seudominio.com.br;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# /etc/nginx/conf.d/admin.conf
server {
listen 80;
server_name admin.seudominio.com.br;
# Restringir acesso por IP (painel admin)
allow 177.10.0.1; # IP do escritório
deny all;
location / {
proxy_pass http://127.0.0.1:3002;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Roteamento por path em um único domínio
Direcionar diferentes caminhos para diferentes backends no mesmo domínio:
# /etc/nginx/conf.d/monolito-para-microservicos.conf
server {
listen 80;
server_name seudominio.com.br;
# Frontend (Next.js / React)
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
# API REST
location /api/ {
proxy_pass http://127.0.0.1:4000/; # / no final: remove /api do path
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Serviço de upload de arquivos
location /upload/ {
proxy_pass http://127.0.0.1:5000/;
client_max_body_size 200M;
proxy_read_timeout 300s;
}
# Documentação estática
location /docs/ {
root /var/www;
try_files $uri $uri/ =404;
}
}Redirecionar HTTP para HTTPS e www para não-www
Configurar redirecionamentos permanentes:
# Redirecionar HTTP → HTTPS
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
return 301 https://seudominio.com.br$request_uri;
}
# Redirecionar www → sem www (em HTTPS)
server {
listen 443 ssl;
server_name www.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
return 301 https://seudominio.com.br$request_uri;
}
# Servidor principal
server {
listen 443 ssl;
server_name seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
}
}$ 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.