Cloud & Infraestrutura • 4 min de leitura

Nginx: o que é, como funciona e por que vale a pena usar

Nginx: o que é, como funciona e por que vale a pena usar

Se você já tentou escalar uma aplicação web e viu o servidor travar com poucas centenas de usuários simultâneos, provavelmente estava usando uma configuração padrão que não foi pensada para isso. Esse é o problema que o Nginx resolve — e resolve bem.

Neste artigo, a primeira parte de uma série de três, vamos entender o que é o Nginx, como ele funciona por dentro e por que ele se tornou o servidor web mais usado em aplicações de alto tráfego.

O problema com o modelo tradicional

Servidores como o Apache foram construídos num modelo chamado prefork ou thread-per-request: para cada requisição recebida, o servidor cria (ou aloca) uma thread ou processo dedicado. Isso é simples de implementar, mas escala mal.

Com 1.000 conexões simultâneas, você tem 1.000 threads na memória. Com 10.000, a situação começa a ficar crítica. Memória esgotada, trocas de contexto excessivas, latência aumentando. Esse fenômeno é conhecido como o problema C10k — como servir 10.000 clientes ao mesmo tempo com um único servidor.

A arquitetura orientada a eventos do Nginx

O Nginx foi criado em 2004 por Igor Sysoev com esse problema em mente. Em vez de criar uma thread por conexão, ele usa uma arquitetura baseada em eventos (event-driven).

O funcionamento é assim:

  • Um processo master lê a configuração e gerencia os workers
  • Múltiplos worker processes ficam em execução, geralmente um por núcleo de CPU
  • Cada worker usa um loop de eventos para monitorar e processar centenas ou milhares de conexões de forma não-bloqueante

Quando uma conexão está aguardando dados (por exemplo, o cliente está lendo uma resposta lenta), o worker não fica parado esperando — ele processa outras conexões enquanto isso. Nenhum recurso é desperdiçado.

                    ┌─────────────────────────────┐
                    │        Master Process        │
                    │  (lê config, gerencia PID)   │
                    └────────────┬────────────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              ▼                  ▼                   ▼
        ┌──────────┐       ┌──────────┐       ┌──────────┐
        │ Worker 1 │       │ Worker 2 │       │ Worker N │
        │ (event   │       │ (event   │       │ (event   │
        │  loop)   │       │  loop)   │       │  loop)   │
        └──────────┘       └──────────┘       └──────────┘

O que o Nginx sabe fazer

O Nginx não é só um servidor web. Ele atua em várias camadas de uma infraestrutura moderna:

Servidor web para conteúdo estático

Servir HTML, CSS, JavaScript, imagens e fontes diretamente do disco com altíssima eficiência. Nenhum backend é acionado.

Reverse proxy

Recebe requisições do cliente e as repassa para um ou mais servidores de aplicação (Node.js, Python, Go, PHP). O cliente nunca fala diretamente com o backend.

Load balancer

Distribui requisições entre múltiplos backends usando diferentes estratégias: round-robin, least connections, IP hash e outras.

Cache de respostas

Armazena respostas do backend em disco ou memória. Requisições repetidas são respondidas pelo Nginx sem chegar ao servidor de aplicação.

Terminação SSL/TLS

Gerencia os certificados e criptografia, entregando as requisições já descriptografadas ao backend via HTTP simples.

Compressão gzip

Comprime respostas antes de enviá-las ao cliente, reduzindo o tráfego de rede em até 70% para texto, CSS e JavaScript.

Comparativo: Apache vs Nginx

CaracterísticaApacheNginx
Modelo de concorrênciaThread/processo por requisiçãoEvent-driven, assíncrono
Uso de memória com alto tráfegoAltoBaixo
Conteúdo estáticoBomExcelente
Configuração por diretório (.htaccess)SimNão (centralizada)
Módulos dinâmicosSimSim (desde v1.9.11)
Ideal paraApps legadas, configurações complexas por diretórioAlta concorrência, reverse proxy, microserviços

Nenhum dos dois é "melhor" em absoluto — mas para aplicações novas com requisitos de escala, o Nginx é a escolha mais comum.

Como o Nginx processa uma requisição

O ciclo de vida de uma requisição no Nginx passa por fases bem definidas:

  1. Aceita a conexão TCP — o worker recebe a conexão pelo event loop
  2. Lê o request HTTP — cabeçalhos e corpo da requisição
  3. Avalia as diretivas — verifica server_name, blocos location, regras de cache
  4. Executa a ação — serve arquivo estático, faz proxy para backend, retorna redirect, etc.
  5. Envia a resposta — com compressão e headers adequados
  6. Registra nos logs — acesso e erros em arquivos separados

Esse fluxo acontece para milhares de conexões em paralelo, dentro do mesmo processo, sem bloqueio.

Quando usar Nginx

O Nginx é uma boa escolha quando você precisa de:

  • Servidor para sites ou SPAs com conteúdo predominantemente estático
  • Reverse proxy na frente de aplicações Node.js, Python (Django/FastAPI), Go ou PHP-FPM
  • Load balancer para múltiplas instâncias da mesma aplicação
  • Gateway único para microsserviços, centralizando SSL, logs e rate limiting
  • Cache de respostas para reduzir carga no backend

Próximo artigo

Na parte 2 desta série, saímos da teoria e configuramos um servidor Nginx do zero: instalação, estrutura de diretórios, arquivo de configuração versionado no repositório e todos os comandos necessários para deixar o servidor respondendo em produção.

Referências: