Traefik vs Nginx como reverse proxy para múltiplos containers Docker em produção

Por · Publicado em · Atualizado em · 8 min de leitura

Traefik vs Nginx como reverse proxy para múltiplos containers
Foto: Wolfgang Weiser / Pexels

Traefik vs Nginx como reverse proxy para múltiplos containers Docker em produção: qual escolher? Se você precisa de descoberta automática via labels e TLS integrado, Traefik costuma simplificar. Se quer controle fino e máxima previsibilidade com configuração tradicional, Nginx é sólido. Abaixo, critérios claros, exemplos de configuração e como testar desempenho.

Resumo rápido: quando escolher cada um

Ambos entregam proxy reverso e balanceamento de carga. A diferença está em operação e fluxo de configuração no Docker. Use esta orientação como ponto de partida e valide no seu contexto:

Traefik integra-se nativamente ao Docker via labels e renova certificados automaticamente. Nginx oferece controle detalhado, porém requer automação extra para refletir mudanças de containers sem reload manual.

  • Escolha Traefik se você quer descoberta automática via labels e HTTPS com Let's Encrypt integrado.
  • Escolha Nginx se você precisa de diretivas avançadas e comportamento previsível via arquivos estáticos.
  • Ambos lidam bem com alto tráfego; teste no seu cenário antes da decisão final.
  • Ambos suportam HTTP/2 e HTTP/3 em versões recentes, dependendo do build e da configuração.

Tabela comparativa: critérios práticos

Este comparativo “Traefik vs Nginx como reverse proxy para múltiplos containers Docker em produção” coloca lado a lado os pontos que mais afetam operação em produção. Use a tabela como checklist ao montar pipeline de deploy e governança de configuração.

Critério Traefik Nginx
Descoberta de serviços (Docker) Nativa por labels, sem reload Não nativa; requer reload/sidecar
Configuração dinâmica Hot-reload via provider Docker Arquivos estáticos; reload para aplicar
Let's Encrypt Integrado (ACME) Externo (ex.: Certbot)
Roteamento (host, path, headers) Regras declarativas e middlewares Diretivas flexíveis por server/location
HTTP/2 e HTTP/3 Disponível em versões recentes Disponível em versões recentes
Observabilidade Métricas/health integrados stub_status/exporters (configurar)
Desempenho bruto simples Muito bom; baixo overhead Excelente em cenários estáticos simples
Curva de aprendizado Rápida no Docker (labels) Conhecimento de diretivas e blocos
Mudanças frequentes (escala) Automáticas, sem intervenção Requer automação de reload
Blue/Green e canary Roteamento por regras e weights Possível com upstreams e maps

Arquitetura e descoberta de serviços com Docker

No Traefik, o provider Docker lê labels dos containers e cria rotas automaticamente. Isso reduz scripts auxiliares e reloads. Em Nginx, a resolução de host acontece no parse da configuração. Mudanças de IP exigem reload do processo ou ferramentas externas para regerar o arquivo.

Esse detalhe pesa em ambientes com escala elástica ou rollouts frequentes. Em ambientes estáveis, Nginx com configuração bem versionada é simples e previsível.

Exemplo: Traefik com labels e HTTPS automático (Docker Compose)

Este compose expõe Traefik nas portas 80/443, emite certificados com ACME e publica dois serviços por host. Troque domínios e portas conforme seu app. Expor o docker.sock tem riscos; use somente leitura ou um socket-proxy dedicado. Se precisar instalar Docker/Compose, veja o guia: instalar Docker e Docker Compose.

version: "3.8"

networks:
  web:
    external: false

services:
  traefik:
    image: traefik:v2.10
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - [email protected]
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.httpchallenge=true
      - --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt:/letsencrypt
    networks:
      - web

  app1:
    image: ghcr.io/org/app1:latest
    labels:
      - traefik.enable=true
      - traefik.http.routers.app1.rule=Host(`app1.example.com`)
      - traefik.http.routers.app1.entrypoints=websecure
      - traefik.http.routers.app1.tls.certresolver=le
      - traefik.http.services.app1.loadbalancer.server.port=3000
    networks:
      - web

  app2:
    image: ghcr.io/org/app2:latest
    labels:
      - traefik.enable=true
      - traefik.http.routers.app2.rule=Host(`api.example.com`) && PathPrefix(`/v1`)
      - traefik.http.routers.app2.entrypoints=websecure
      - traefik.http.routers.app2.tls.certresolver=le
      - traefik.http.services.app2.loadbalancer.server.port=8080
    networks:
      - web

volumes:
  traefik_letsencrypt:

Exemplo: Nginx como proxy reverso para múltiplos serviços

Aqui está um nginx.conf mínimo com dois server blocks. Nginx e seus containers-alvo devem estar na mesma rede Docker. Em mudanças de IP/escala, será necessário automatizar reload do Nginx para refletir o novo destino. O Portainer pode ajudar no gerenciamento dos containers: usar o Portainer para Docker.

worker_processes auto;
error_log /var/log/nginx/error.log warn;

events { worker_connections 1024; }

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  sendfile      on;
  keepalive_timeout  65;

  map $http_x_forwarded_proto $upstream_proto { default http; https https; }

  server {
    listen 80;
    server_name app1.example.com;

    location / {
      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_pass http://app1:3000;
    }
  }

  server {
    listen 80;
    server_name api.example.com;

    location /v1/ {
      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_pass http://api:8080;
    }
  }
}

TLS, HTTP/2/3 e segurança operacional

Traefik emite e renova certificados via ACME sem jobs externos. No Nginx, você pode usar um cliente ACME (como Certbot) e apontar as chaves no server block. Em ambos, ative HTTP/2 e, se viável, HTTP/3 nas versões compatíveis. Para fundamentos e automação de certificados, veja: gerar SSL grátis com Let's Encrypt.

Endureça a borda: force TLS fortes, limite headers, configure timeouts e tamanho de corpo. Mantenha imagens atualizadas e monitore CVEs. Em Traefik, middlewares ajudam a padronizar políticas. Em Nginx, use diretivas e includes versionados.

Desempenho e como testar antes de decidir

Em cenários simples de proxy de conteúdo estático ou apenas pass-through, Nginx tende a alcançar throughput muito alto com baixa latência. Em ambientes com regras dinâmicas e muitos serviços mudando, Traefik mantém agilidade operacional com desempenho consistente. Ao avaliar Traefik vs Nginx como reverse proxy para múltiplos containers Docker em produção, rode testes controlados.

Teste de carga: rode em rede próxima ao serviço, com conexões e duração realistas. Varie HTTP/1.1, HTTP/2 e TLS. Compare CPU, memória e latências sob o mesmo hardware. Abaixo, comandos de referência.

# Hey (HTTP)
docker run --rm rakyll/hey -z 30s -c 200 https://app1.example.com/api/health

# wrk (HTTP/1.1 e TLS via openssl)
wrk -t4 -c200 -d30s --latency https://app1.example.com/

# Dica: execute os testes para Traefik e Nginx sob a mesma carga e máquina.

Observabilidade, logs e métricas em produção

Registre correlação de requisições e campos estruturados para inspecionar gargalos atrás do proxy. Traefik fornece métricas prontas para coletores comuns. Em Nginx, exponha um endpoint de status e use exporters. Centralize logs em JSON e aplique amostragem em alto volume.

Para implementar logs estruturados e correlação de IDs no backend, veja este guia: logs estruturados (JSON) e correlação. Integre o proxy ao pipeline de observabilidade de sua stack atual.

Custos operacionais, governança e fluxo de mudanças

Traefik simplifica o dia a dia quando times publicam novos serviços com frequência via labels no Compose/Swarm/K8s. Menos arquivos para regerar e menos janelas de reload. Nginx brilha quando você precisa de regras muito específicas, filtros e tunning fino por diretiva.

Independente da escolha: versione configuração, teste em staging, automatize health-checks e reversões. Se ainda estiver montando o ambiente base, estes recursos ajudam: instalar Docker e Docker Compose.

Perguntas frequentes

Traefik ou Nginx é mais rápido como reverse proxy?

Depende do cenário. Em pass-through simples e conteúdo estático, Nginx costuma atingir throughput muito alto. Com regras dinâmicas, discovery automático e muitos serviços mudando, Traefik oferece agilidade operacional com desempenho consistente. Compare no seu tráfego real com testes de carga controlados.

Consigo usar Let's Encrypt automático com Nginx?

Sim. Nginx não tem ACME integrado, mas você pode usar um cliente externo para emitir e renovar certificados e apontar os caminhos no server block. Em Traefik, o suporte ACME é nativo e simplifica a automação de certificados.

Traefik e Nginx suportam HTTP/3 (QUIC)?

Ambos oferecem suporte em versões recentes e com a configuração adequada. Verifique a versão e os parâmetros necessários para habilitar QUIC e ajuste firewalls e portas. Teste compatibilidade de clientes e monitore o impacto nas métricas de latência.

Como fazer descoberta automática de containers no Nginx?

O Nginx puro não observa o Docker. Use automação para regerar a configuração e recarregar o processo quando serviços mudarem. Alternativamente, adote sidecars ou orquestradores que integrem discovery ao proxy, ou considere usar Traefik quando labels atendem às suas necessidades.

É seguro montar o docker.sock no Traefik?

Montar o docker.sock dá acesso amplo à API do Docker e envolve riscos. Se optar por isso, monte como somente leitura e considere um socket-proxy que restrinja chamadas. Aplique o princípio do menor privilégio e monitore continuamente a superfície de ataque.

Quer ajuda para definir seu proxy reverso em produção?

Vamos avaliar seu tráfego, requisitos de TLS/roteamento e fluxo de deploy para indicar a melhor opção entre Traefik e Nginx e preparar o ambiente com boas práticas.

Falar sobre arquitetura de proxy

Veja também