Arquitetura do Proxy Reverso com SSL Automatizado
O ecossistema Docker permite a orquestração de gateways de API com renovação automática de credenciais TLS através da Let's Encrypt. A stack tradicional combina o nginx-proxy para roteamento de requisições, o docker-gen para geração dinâmica de configurações baseadas em metadados de contêineres, e o acme-companion para interagir diretamente com a Autoridade Certificadora (CA).
Definição da Stack com Docker Compose
Em vez de configurar cada componente isoladamente através de comandos manuais ou scripts soltos, a abordagem recomendada utiliza um arquivo de composição unificado. Abaixo, apresentamos uma topologia reestruturada onde os volumes de configuração e os certificados são compartilhados de forma segura entre o gateway de borda e o provisionador de segurança.
version: '3.8'
services:
edge_gateway:
image: nginxproxy/nginx-proxy:alpine
container_name: api_gateway
ports:
- "80:80"
- "443:443"
volumes:
- proxy_certs:/etc/nginx/certs:ro
- proxy_vhost:/etc/nginx/vhost.d
- proxy_html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- frontend_net
tls_provisioner:
image: nginxproxy/acme-companion:latest
container_name: cert_manager
environment:
- DEFAULT_EMAIL=security@empresa.com
- DHPARAM_BITS=4096
- ACME_CA_URI=https://acme-v02.api.letsencrypt.org/directory
volumes_from:
- edge_gateway
volumes:
- proxy_certs:/etc/nginx/certs:rw
- acme_state:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- frontend_net
volumes:
proxy_certs:
proxy_vhost:
proxy_html:
acme_state:
networks:
frontend_net:
driver: bridge
Persistência e Configurações de Volume
A integridade dos certificados e a prevenção de limitações de taxa (rate limits) impostas pela CA dependem diretamente da persistência de dados em disco. O diretório /etc/acme.sh foi mapeado para um volume dedicado (acme_state) para garantir que o estado das requisições sobreviva a reinicializações.
Para configurações personalizadas por domínio, arquivos específicos podem ser injetados em /etc/nginx/vhost.d. Caso seja necessário sobrescrever o comportamento padrão do proxy para uma rota particular, um arquivo nomeado com o domínio exato (por exemplo, api.exemplo.com) deve ser montado neste caminho.
Personalização de Parâmetros Criptográficos
O provisionador gera parâmetros Diffie-Hellman (DH) automaticamente em seu primeiro ciclo de execução. O tamanho desta chave é controlado via variável de ambiente DHPARAM_BITS, aceitando valores como 2048, 3072 ou 4096.
Se a infraestrutuar precisar suportra clientes legados (como aplicações baseadas em Java 6 ou 7) que falham ao negociar chaves superiores a 1024 bits, a geração automática deve ser contornada. Nesses cenários, um arquivo dhparam.pem pré-computado deve ser gerado externamente e montado diretamente no gateway:
edge_gateway:
volumes:
- ./legacy_certs/dhparam.pem:/etc/nginx/certs/dhparam.pem:ro
Diagnóstico de Falhas na Emissão de Certificados
Problemas durante a execução do desafio HTTP-01 geralmente estão relacionados a bloqueios de rede, configurações incorretas de DNS ou falhas na leitura do socket do Docker.
- Verifique se as portas 80 e 443 estão acessíveis publicamente e roteadas diretamente para o serviço
edge_gateway. - Inspecione os logs do provisionador executando
docker compose logs -f cert_managerpara identificar erros de validação de domínio junto à API da Let's Encrypt. - Certifique-se de que o contêiner da aplicação de backend possui as variáveis de ambiente
VIRTUAL_HOSTeLETSENCRYPT_HOSTdevidamente declaradas. Sem esses metadados, o motor de templates não acionará o fluxo de criação do certificado.