Pular para o conteúdo
Guides 9 min de leitura 1246 visualizações

Caddy como proxy reverso

Aprenda a configurar o Caddy como um proxy reverso eficiente, protegendo seus sites automaticamente com HTTPS. Descubra sua simplicidade e seu poder.

Caddy como proxy reverso

Quando configurado como proxy reverso, o Caddy provisiona, renova e gerencia automaticamente os certificados TLS dos seus domínios usando provedores ACME como Let's Encrypt ou ZeroSSL, habilitando HTTPS por padrão sem intervenção manual. Esse recurso simplifica a implantação de servidores web seguros ao eliminar as tarefas manuais de gerenciamento de certificados.

Entendendo o HTTPS automático do Caddy

O principal diferencial do Caddy é sua abordagem de HTTPS sem configuração. Quando o Caddy recebe uma requisição para um domínio, ele tenta obter um certificado TLS para esse domínio caso ainda não exista um e nenhum tenha sido configurado explicitamente. Esse processo usa o protocolo ACME (Automatic Certificate Management Environment).

Como o ACME e o Caddy interagem

  1. Resolução do domínio: o Caddy identifica o nome de domínio associado à requisição recebida.
  2. Verificação do certificado: ele consulta seu armazenamento local em busca de um certificado válido já existente para esse domínio.
  3. Desafio ACME: se nenhum certificado válido for encontrado, o Caddy inicia um desafio ACME com o provedor ACME configurado (por padrão Let's Encrypt, com ZeroSSL como alternativa). Os tipos de desafio mais comuns são HTTP-01 e DNS-01.
    • Desafio HTTP-01: o Caddy cria um arquivo temporário em um caminho específico (/.well-known/acme-challenge/) no servidor. O provedor ACME então tenta acessar esse arquivo via HTTP na porta 80 para verificar a posse do domínio. Isso exige que o Caddy esteja publicamente acessível na porta 80.
    • Desafio DNS-01: o Caddy instrui o provedor ACME a verificar a posse do domínio checando um registro TXT específico na zona DNS do domínio. Esse método é obrigatório para certificados wildcard e pode ser usado quando a porta 80 não está disponível. Ele exige que o Caddy tenha credenciais de um provedor DNS suportado.
  4. Emissão do certificado: após a conclusão bem-sucedida do desafio, o provedor ACME emite um certificado TLS para o domínio.
  5. Armazenamento do certificado: o Caddy guarda o certificado e sua chave privada de forma segura em disco.
  6. Renovação automática: o Caddy monitora as datas de expiração dos certificados e os renova automaticamente com boa antecedência (normalmente 30 dias antes do vencimento) usando o mesmo processo de desafio ACME.
  7. OCSP Stapling: o Caddy também busca e anexa automaticamente respostas OCSP aos certificados, melhorando o desempenho e a privacidade do cliente ao permitir que ele verifique o status de revogação do certificado sem contatar diretamente a Autoridade Certificadora.

Configuração básica de proxy reverso com HTTPS automático

Uma configuração mínima de Caddyfile para proxy reverso já habilita implicitamente o HTTPS automático.

Exemplo simples de proxy reverso

yourdomain.com {
    reverse_proxy localhost:8080
}

Neste exemplo:
* yourdomain.com: este é o rótulo do site. O Caddy vai escutar as requisições para esse domínio tanto na porta 80 (para redirecionamentos HTTP e desafios ACME) quanto na 443 (para HTTPS).
* reverse_proxy localhost:8080: esta diretiva encaminha todas as requisições recebidas para yourdomain.com a uma aplicação upstream rodando em localhost na porta 8080.

Ao iniciar com essa configuração, o Caddy executa automaticamente os seguintes passos:
1. Tenta obter um certificado TLS para yourdomain.com de um provedor ACME.
2. Configura redirecionamentos de HTTP para HTTPS para todo o tráfego na porta 80.
3. Serve yourdomain.com via HTTPS usando o certificado obtido.

Executando o Caddy

Para rodar o Caddy com essa configuração:

  1. Salve o conteúdo acima como Caddyfile no diretório desejado.
  2. Navegue até esse diretório no seu terminal.
  3. Execute: caddy run

Em ambientes de produção, recomenda-se rodar o Caddy como serviço systemd ou dentro de um contêiner Docker.

Configurações avançadas de HTTPS

Certificados personalizados

Se você já tem certificados TLS (por exemplo, de uma CA corporativa ou certificados wildcard obtidos manualmente), o Caddy pode ser configurado para usá-los em vez de provisionar automaticamente.

yourdomain.com {
    tls /path/to/your/cert.pem /path/to/your/key.pem
    reverse_proxy localhost:8080
}
  • tls /path/to/your/cert.pem /path/to/your/key.pem: especifica o arquivo de certificado com a cadeia completa e o arquivo da chave privada. O Caddy usará esses arquivos e não tentará provisionar um certificado para yourdomain.com.

Certificados wildcard com desafio DNS-01

Certificados wildcard (*.yourdomain.com) exigem o desafio ACME DNS-01, porque o desafio HTTP-01 não consegue comprovar a posse de subdomínios arbitrários. Isso torna necessário configurar o Caddy com credenciais do seu provedor DNS.

*.yourdomain.com {
    tls {
        dns cloudflare {
            api_token "YOUR_CLOUDFLARE_API_TOKEN"
        }
    }
    reverse_proxy localhost:8080
}
  • tls { dns cloudflare { ... } }: este bloco diz ao Caddy para usar o desafio DNS-01 com o provedor DNS Cloudflare.
  • api_token "YOUR_CLOUDFLARE_API_TOKEN": substitua pelo seu token de API real da Cloudflare. O Caddy suporta diversos provedores DNS por meio de plugins. Consulte a documentação do Caddy para as configurações específicas de cada provedor.

Múltiplos domínios e blocos de site

O Caddy pode servir vários domínios, cada um com seu próprio HTTPS automático.

yourdomain.com {
    reverse_proxy localhost:8080
}

anotherdomain.org {
    reverse_proxy localhost:8081
}

O Caddy vai provisionar e gerenciar certificados de forma independente para yourdomain.com e anotherdomain.org.

Comparação entre os desafios HTTP-01 e DNS-01

Característica Desafio HTTP-01 Desafio DNS-01
Método de verificação Servir um arquivo na porta 80 Adicionar um registro TXT ao DNS
Porta necessária 80 (para o desafio ACME) Nenhuma porta específica, apenas acesso ao DNS
Suporte a wildcard Não Sim (*.yourdomain.com)
Servidores internos Inadequado se o Caddy não for acessível publicamente Adequado para servidores internos se o DNS for gerenciável
Configuração Normalmente automática, sem config extra Exige credenciais do provedor DNS e um plugin
Necessidades de firewall A porta 80 precisa estar aberta para a internet Nenhuma porta de entrada necessária no host do Caddy para o desafio

Provedores ACME

Por padrão, o Caddy usa o Let's Encrypt para provisionar certificados. O ZeroSSL é usado como alternativa. Você pode configurar explicitamente qual provedor ACME usar.

yourdomain.com {
    tls [email protected] {
        ca https://acme-v02.api.letsencrypt.org/directory
    }
    reverse_proxy localhost:8080
}
  • ca https://acme-v02.api.letsencrypt.org/directory: especifica a URL da CA ACME.
  • [email protected]: informar um endereço de e-mail é recomendado para o registro da conta ACME e para notificações importantes da CA.

Gerenciando certificados

O Caddy gerencia os certificados automaticamente, mas entender seu armazenamento e as opções manuais pode ser útil.

Armazenamento de certificados

Por padrão, o Caddy guarda certificados, chaves privadas e informações da conta ACME em um diretório de dados. O local exato depende do sistema operacional e de como o Caddy é executado:
* Linux: /var/lib/caddy/.local/share/caddy (quando executado como root via systemd) ou $HOME/.local/share/caddy (quando executado como usuário).
* Docker: dentro do volume /data do contêiner.

Esse diretório deve ser persistente (por exemplo, um volume montado no Docker) para evitar reprovisionar certificados a cada reinício.

Renovação e revogação manuais

Embora o Caddy automatize a renovação, raramente é preciso interagir diretamente com o armazenamento de certificados.
* Renovação: se for necessária uma renovação imediata (por exemplo, após o comprometimento de um certificado), você pode apagar os arquivos daquele certificado no diretório de dados do Caddy. O Caddy então tentará provisionar um novo na próxima inicialização ou requisição.
* Revogação: a revogação de certificados é uma operação avançada, normalmente feita quando uma chave privada é comprometida. O Caddy não oferece um utilitário de linha de comando direto para revogação. Isso geralmente seria feito pela API do provedor ACME ou por um cliente dedicado, se necessário.

Solucionando problemas comuns de HTTPS

Configuração de firewall

Garanta que as portas 80 e 443 estejam abertas para tráfego de entrada no seu servidor Caddy. A porta 80 é essencial para o desafio ACME HTTP-01 e para os redirecionamentos de HTTP para HTTPS.

Propagação de DNS

Se estiver usando o desafio DNS-01, verifique se seus registros DNS (especificamente o registro TXT do desafio) se propagaram corretamente. Use ferramentas como dig ou serviços online de consulta DNS. Propagação incorreta ou lenta pode impedir a emissão do certificado.

Limites de taxa do ACME

Provedores ACME como o Let's Encrypt têm limites de taxa para emissão de certificados. Tentativas repetidas com falha podem levar a bloqueios temporários.
* Ambiente de staging: use o ambiente de staging do ACME para testes e evite atingir os limites de produção.
caddyfile yourdomain.com { tls [email protected] { ca https://acme-staging-v02.api.letsencrypt.org/directory } reverse_proxy localhost:8080 }
* Consolide domínios: se você serve muitos subdomínios, considere um certificado wildcard para reduzir o número de requisições individuais de certificado.

Logs do Caddy

Os logs do Caddy trazem informações detalhadas sobre tentativas de provisionamento de certificados, renovações e eventuais erros. Consulte os logs em busca de mensagens de erro específicas se o HTTPS não estiver funcionando como esperado.
* Local padrão dos logs: os logs normalmente são escritos na saída padrão (stdout) ou em um arquivo de log configurado.
* Log detalhado: você pode aumentar o nível de detalhe dos logs para obter mais informações de diagnóstico.

{
    log {
        output file /var/log/caddy/caddy.log
        level DEBUG
    }
}

yourdomain.com {
    reverse_proxy localhost:8080
}

Considerações de implantação

Docker

Ao implantar o Caddy no Docker, garanta que o diretório de dados esteja mapeado para um volume persistente.

version: '3.8'
services:
  caddy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data # Armazenamento persistente para os certificados
      - caddy_config:/config
  myapp:
    image: myapp:latest
    restart: unless-stopped
    expose:
      - "8080" # Porta interna, não exposta externamente

volumes:
  caddy_data:
  caddy_config:

Serviço systemd

Para implantações em bare-metal ou VM, rodar o Caddy como serviço systemd é a prática padrão. A documentação oficial do Caddy fornece arquivos caddy.service de exemplo que configuram o Caddy para rodar como usuário dedicado e gerenciar corretamente seu diretório de dados.

Uso de recursos

O Caddy é leve. As operações de gerenciamento de certificados consomem recursos mínimos e normalmente ocorrem em segundo plano. O consumo principal de recursos estará ligado ao encaminhamento do tráfego.

Boas práticas de segurança

O HTTPS automático do Caddy cuida de muitos aspectos de segurança por padrão:
* Cifras TLS fortes: o Caddy usa conjuntos de cifras TLS modernos e seguros.
* HTTP Strict Transport Security (HSTS): o Caddy pode adicionar automaticamente o cabeçalho Strict-Transport-Security, instruindo os navegadores a sempre se conectarem via HTTPS.
* OCSP Stapling: reduz a latência e melhora a privacidade.

Embora o Caddy resolva boa parte da complexidade do TLS, as práticas gerais de segurança continuam relevantes:
* Mantenha o Caddy atualizado: atualize o Caddy regularmente para a versão mais recente e aproveite as correções de segurança e os novos recursos.
* Menor privilégio: rode o Caddy com as permissões mínimas necessárias. Os arquivos oficiais de serviço systemd configuram o Caddy para rodar como usuário não-root.
* Firewall: restrinja o acesso às suas aplicações upstream (por exemplo, localhost:8080) para que só sejam acessíveis a partir da instância do Caddy.
* Controle de acesso: implemente controle de acesso ou autenticação adicionais, se necessário, para rotas ou aplicações específicas por trás do proxy.

Atualizado: 04.03.2026
Voltar à categoria

Leia também

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.