Nginx na Prática: Proxy Reverso, Load Balancer e Servidor Web de Alta Performance

O que é o Nginx e por que ele domina a web?
Lançado em 2004 por Igor Sysoev, o Nginx (pronuncia-se "engine-x") nasceu para resolver o problema C10K — a capacidade de lidar com 10 mil conexões simultâneas. Diferente do Apache, que cria um processo ou thread por conexão, o Nginx utiliza uma arquitetura assíncrona e orientada a eventos, consumindo muito menos memória e CPU sob alta carga.
Hoje, o Nginx é responsável por servir mais de 30% de todos os sites da internet, incluindo gigantes como Netflix, Airbnb, Dropbox e WordPress.com. Sua versatilidade permite que atue como:
- Servidor Web: Servindo arquivos estáticos com performance excepcional
- Proxy Reverso: Roteando requisições para aplicações backend
- Load Balancer: Distribuindo tráfego entre múltiplos servidores
- Terminador SSL/TLS: Gerenciando certificados e criptografia
- Cache HTTP: Acelerando respostas e reduzindo carga no servidor de aplicação
Instalação e Primeiros Passos
A instalação do Nginx é simples em qualquer distribuição Linux:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx -y
# Verificar status
sudo systemctl status nginx
# Comandos essenciais
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo nginx -t # Testar configuraçãoApós a instalação, o arquivo de configuração principal fica em /etc/nginx/nginx.conf, e os sites configurados ficam em /etc/nginx/sites-available/ com links simbólicos em /etc/nginx/sites-enabled/.
Configurando um Proxy Reverso
O proxy reverso é o caso de uso mais comum do Nginx. Ele recebe requisições externas e as encaminha para um servidor de aplicação (Node.js, Python, Java, etc.) rodando em uma porta interna:
server {
listen 80;
server_name meudominio.com.br;
location / {
proxy_pass http://localhost: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;
}
location /static/ {
alias /var/www/meuapp/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
}Neste exemplo, todo o tráfego para meudominio.com.br é redirecionado para uma aplicação rodando na porta 3000. Arquivos estáticos são servidos diretamente pelo Nginx com cache de 30 dias, aliviando a carga do backend.
Balanceamento de Carga com Nginx
Quando sua aplicação precisa escalar horizontalmente, o Nginx distribui as requisições entre múltiplos servidores backend:
upstream backend {
least_conn; # Algoritmo: least_connections
server 10.0.0.1:3000 weight=3;
server 10.0.0.2:3000 weight=2;
server 10.0.0.3:3000 backup;
}
server {
listen 80;
server_name api.meudominio.com.br;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_500;
health_check interval=5s fails=3 passes=2;
}
}O Nginx suporta diversos algoritmos de balanceamento:
- round-robin (padrão): distribuição circular sequencial
- least_conn: envia para o servidor com menos conexões ativas
- ip_hash: mantém um usuário sempre no mesmo servidor (sessões persistentes)
- weight: define proporções de carga entre servidores
SSL/TLS e HTTPS com Let's Encrypt
Configurar HTTPS é essencial e, com o Certbot, torna-se trivial:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d meudominio.com.br -d www.meudominio.com.br
# Renovação automática
sudo systemctl enable certbot.timer
sudo certbot renew --dry-runUma configuração SSL robusta inclui redirecionamento HTTP para HTTPS e uso de protocolos modernos:
server {
listen 80;
server_name meudominio.com.br;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name meudominio.com.br;
ssl_certificate /etc/letsencrypt/live/meudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meudominio.com.br/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
# HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
proxy_pass http://localhost:3000;
}
}Cache HTTP e Aceleração de Conteúdo
O cache do Nginx pode reduzir drasticamente a latência e a carga no backend:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m;
server {
location /api/ {
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500;
proxy_pass http://backend;
}
}Dica importante: Use proxy_cache_bypass e no_cache para evitar cachear conteúdos dinâmicos ou dados de usuários autenticados.
Rate Limiting para Proteção contra Abusos
Proteja sua API contra ataques de força bruta e DDoS com rate limiting:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend;
}
location /login/ {
limit_req zone=login_limit burst=5;
proxy_pass http://backend;
}
}Boas Práticas e Otimizações
Para extrair o máximo do Nginx em produção, siga estas recomendações:
- Worker Processes: configure
worker_processes auto;para usar todos os núcleos da CPU - Worker Connections: aumente
worker_connections 1024;para4096ou mais - Gzip: ative compressão para reduzir o tamanho das respostas:
gzip on; gzip_types text/css application/javascript application/json image/svg+xml; gzip_min_length 256; - Sendfile: ative
sendfile on;etcp_nopush on;para servir arquivos estáticos mais rápido - Logs: desabilite logs de acesso para arquivos estáticos e use formato personalizado para reduzir I/O
Monitoramento e Logs
Monitore a saúde do seu Nginx com ferramentas como Prometheus + Nginx Exporter, ou analise logs com o GoAccess:
# Instalar o GoAccess para análise de logs
sudo apt install goaccess -y
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
# Status page (stub_status)
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}Conclusão
O Nginx é muito mais que um simples servidor web — é um ecossistema completo de componentes de infraestrutura que, juntos, formam a espinha dorsal de aplicações modernas escaláveis. Com sua arquitetura eficiente, vasto ecossistema de módulos e configuração declarativa, o Nginx continua sendo a ferramenta essencial para qualquer profissional de DevOps e desenvolvimento web.
Dominar o Nginx é investir em performance, segurança e escalabilidade para todas as suas aplicações. Comece com um proxy reverso simples, adicione cache, depois SSL, e evolua gradualmente para um cluster completo com balanceamento de carga.







