Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

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

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ção

Apó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-run

Uma 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; para 4096 ou 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; e tcp_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.

Craft XP
Craft XP