Nginx: Guia Técnico para Proxy Reverso, Balanceamento de Carga e Configuração de Localização

O que é o Nginx

Nginx (engine x) é um servidor web de alto desempenho e proxy reverso, com suporte para IMAP/POP3/SMTP. Desenvolvido pelo programador russo Igor Sysoev em 2004, destaca-se por sua arquitetura orientada a eventos assíncronos não bloqueantes.

Principais Características

  • Alta concorrência: Suporta até 50.000 conexões simultâneas com baixo consumo de memória
  • Design modular: Módulos plugáveis para extensibilidade
  • Atualização sem interrupção: Recarregamento de configurações sem parar o serviço
  • Balanceamento nativo: Distribuição inteligente de requisições para múltiplos servidores backend
  • Processamento eficiente: Tratamento direto de recursos estáticos, redirecionando requisições dinâmicas

Proxy Direto vs Reverso

Tipo Objeto do Proxy Cenário Comum Percepção do Cliente
Proxy Direto Cliente Acesso a recursos restritos Necessita configuração explícita
Proxy Reverso Servidor Balanceamento e segurança Indetectável, acessa diretamente o proxy

Configuração de Proxy Direto

server {
    listen 8080;
    location / {
        proxy_pass http://$http_host$request_uri;
        proxy_set_header Host $http_host;
    }
}

Configuração de Proxy Reverso

server {
    listen 80;
    server_name api.example.com;
    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_next_upstream timeout;
    }
}

Balanceamento de Carga

Configuração Básica

upstream backend_servers {
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
}
server {
    listen 80;
    location / {
        proxy_pass http://backend_servers;
    }
}

Algoritmos Comuns

  • Rotação padrão: Distribuição em sequência
  • Peso (weight): Proporcional à capacidade do servidor
  • ip_hash: Associação por IP do cliente
  • least_conn: Prioriza servidor com menos conexões ativas

Exemplo com Peso

upstream app_pool {
    server 127.0.0.1:9001 weight=2;
    server 127.0.0.1:9002 weight=5;
    server 127.0.0.1:9003 backup;
}

Otimização de Conexões Persisetntes

upstream tomcat_pool {
    keepalive 32;
}
server {
    location / {
        proxy_pass http://tomcat_pool;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Separação de Conteúdo Estático e Dinâmico

set $static_dir /var/www/static;
server {
    listen 80;
    
    # Conteúdo estático
    location ~ \.(jpg|jpeg|png|css|js)$ {
        root $static_dir;
        expires 30d;
    }
    
    # Requisições dinâmicas
    location /api {
        proxy_pass http://app_servers;
        proxy_set_header Host $host;
    }
}

Comparação com Servidores Web Alternativos

Servidor Tipo Vantagens Limitações
Nginx Assíncrono não bloqueante Alta concorrência, baixo consumo, balanceamento robusto Reescrita limitada
Apache Processo/Thread Módulos extensos, reescrita avançada Alto consumo em alta carga
Tomcat Contêiner Servlet Suporte a JSP/Servlet Processamento lento de arquivos estáticos

Tags: nginx reverse-proxy load-balancing location-matching upstream

Publicado em 10-4 04:26