Traefik e Caddy são os reverse proxies modernos que fazem o Nginx parecer um dinossauro. Configuração declarativa, SSL automático, e middlewares que se ligam como Lego. Se ainda usas Nginx escrito à mão, este artigo vai fazer-te repensar.

Passei anos a escrever configs de Nginx à mão. VirtualHosts, SSL, redirecionamentos, rate limiting: tudo manual. Funcionava, mas cada novo serviço era um copy-paste de dezenas de linhas. E quando o certificado expirava porque o renewal hook não estava bem configurado, lá ia eu outra vez.

Foi quando descobri o Traefik e o Caddy. Duas ferramentas que pegam no que o Nginx faz bem e tornam-no automático. Descobrem serviços sozinhos (service discovery), obtêm certificados Let's Encrypt sem configuração extra, e expõem métricas e dashboards sem precisares de plugins externos.

Vou mostrar-te:

  • Arquitetura do Traefik: entrypoints, routers, services, middlewares
  • Docker provider e dashboard
  • Middleware: rate limiting, auth, headers
  • Caddyfile syntax: php_fastcgi, reverse_proxy, file_server
  • Comparação prática: Traefik vs Caddy vs Nginx
  • Exemplo real: deploy de 3 serviços com Traefik + Docker Compose

Arquitetura Traefik

⬆ Traefik: entrypoints recebem tráfego, routers encaminham, services respondem


Traefik: o roteador que descobre serviços

O Traefik tem 4 conceitos fundamentais:

ConceitoO que éExemplo
EntrypointsPortas onde o Traefik ouve (ex: 80, 443, 8080)--entrypoints.web.address=:80
RoutersRegras que ligam entrypoints a services (host, path, headers)Host("app.exemplo.pt")
ServicesDestinos do tráfego (contentores, IPs, load balancers)loadbalancer.server.port=3000
MiddlewaresFunções que processam o pedido antes de chegar ao serviçoRateLimit, Auth, Headers, Redirect

O que torna o Traefik especial é o Docker provider: ele descobre automaticamente contentores com as labels certas e configura rotas sem precisares de reiniciar.

Exemplo de deploy com Traefik + Docker Compose
# docker-compose.yml — 3 serviços com Traefik
services:
  traefik:
    image: traefik:v3.1
    command:
      - "--providers.docker=true"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.leresolver.acme.tlschallenge=true"
      - "[email protected]"
      - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"   # dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`traefik.exemplo.pt`)"
      - "traefik.http.routers.dashboard.service=api@internal"

  app1:
    image: myapp:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app1.rule=Host(`app1.exemplo.pt`)"
      - "traefik.http.services.app1.loadbalancer.server.port=3000"

  app2:
    image: another-app:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app2.rule=Host(`api.exemplo.pt`) && PathPrefix(`/v2`)"
      - "traefik.http.services.app2.loadbalancer.server.port=8080"
      - "traefik.http.middlewares.limit.ratelimit.average=100"
      - "traefik.http.routers.app2.middlewares=limit@docker"
Copy

Dica: As labels do Traefik permitem configurar middlewares diretamente no Compose. Rate limiting, autenticação básica, redirecionamentos e headers personalizados: tudo sem ficheiros de configuração externos.


Caddy: a simplicidade levada ao extremo

O Caddy leva a filosofia "defaults seguros" ao limite. Com uma configuração mínima, tens HTTPS automático, HTTP/2/3, e um servidor de ficheiros pronto a usar.

Exemplos de Caddyfile
# Caddyfile — reverse proxy simples
app.exemplo.pt {
    reverse_proxy localhost:3000
}

# Com TLS personalizado e headers
api.exemplo.pt {
    tls [email protected]
    reverse_proxy localhost:8080 {
        header_up X-Real-IP {remote_host}
    }
}

# Servir ficheiros estáticos + PHP
blog.exemplo.pt {
    root * /var/www/blog
    file_server
    php_fastcgi unix//run/php/php8.2-fpm.sock
}

# Múltiplos sites no mesmo Caddyfile
site1.exemplo.pt {
    reverse_proxy localhost:4000
}

site2.exemplo.pt {
    reverse_proxy localhost:5000
}
Copy

Nota: O Caddy obtém certificados Let's Encrypt automaticamente para todos os domínios que encontra no Caddyfile. Não precisas de instalar Certbot nem de configurar renewal. Tudo é automático por omissão.


Comparação: Traefik vs Caddy vs Nginx

CritérioTraefikCaddyNginx
SSL Automático Let's Encrypt integrado Automático (zero config) Manual ou com Certbot
Service Discovery Docker, Kubernetes, Consul Manual (Caddyfile) Manual
Dashboard/Monitorização Dashboard web + métricas API de admin básica Separado (nginx-status)
Performance Boa Muito boa Excelente
Facilidade de config Média (labels/dinâmico) Muito fácil Difícil (verboso)
Middlewares Muitos (rate limit, auth, retry) Bons (headers, gzip, templates) Básicos (proxy_pass, limit_req)
HTTP/3 Sim Sim (nativo) Experimental
Recursos (RAM)~30-50 MB~15-25 MB~5-15 MB
Quando usarMicroserviços, Docker, KubernetesProjetos pequenos/médios, simplicidadeAlta performance, configuração granular

Comparação Traefik vs Caddy vs Nginx

⬆ Comparação visual das 3 ferramentas em critérios chave


Quando usar cada um?

A minha regra prática:

  • Traefik: se tens um ecossistema de microserviços em Docker, com vários domínios e middlewares. A descoberta automática de contentores poupa imenso tempo. Ideal para um homelab ou cluster de staging.
  • Caddy: se queres algo que "simplesmente funciona". Para um site pessoal, uma API simples, ou um serviço com PHP, o Caddy é imbatível em simplicidade. O HTTPS automático é mágico.
  • Nginx: se precisas de performance extrema, configurações muito específicas, ou já tens um ecossistema Nginx estabelecido. O Nginx continua a ser o mais rápido e o mais flexível para cenários complexos.

Recapitulando

  • Traefik: entrypoints + routers + services + middlewares. traefik.enable=true
  • Traefik: Docker provider descobre contentores automaticamente
  • Caddy: Caddyfile com syntax minimalista. HTTPS automático sem configuração
  • Caddy: reverse_proxy, file_server, php_fastcgi
  • Trafik vs Caddy vs Nginx: escolhe pelo ecossistema (Docker → Traefik, simplicidade → Caddy, performance → Nginx)
  • Exemplo prático: 3 serviços com Traefik + Docker Compose

O mundo dos reverse proxies modernos é fantástico. Tanto o Traefik como o Caddy resolvem problemas reais que o Nginx deixa para o administrador resolver. Escolhe o que faz sentido para o teu ecossistema e nunca mais vais escrever uma config de Nginx à mão.

Experimenta este fim de semana: pega num dos teus serviços atrás de Nginx e mete-o atrás de Caddy ou Traefik. O tempo que poupas em configuração e manutenção vai surpreender-te.

Recursos adicionais

Comentários (0)

Nenhum comentário ainda. Seja o primeiro!

Deixar comentário