O Caddy server tem se mostrado um projeto muito promissor. Além de ser rápido, tem muitas funcionalidades "built-in" que facilitam muito a configuração. Um dos exemplos é a emissão automática de certificados SSL. Além disso, é muito fácil configurar um serviço utilizando ele.
Esta semana, precisei criar um serviço para publicar arquivos estáticos. Ao tentar fazer isto com a configuração padrão dele, notei que não seria possível usar a configuração padrão por ter um cenário um pouco diferente.
No meu cenário, o serviço iria rodar atrás de um load balancer na zCloud que já é responsável por gerar os certificados e fazer a terminação do TLS/SSL. A configuração padrão gerou problemas pois não deveria gerar certificado SSL, apenas servir os arquivos na porta HTTP padrão.
Além disso, havia outra particularidade: precisava de um endpoint de health check com acesso público, enquanto todo o restante precisava ser bloqueado utilizando autenticação padrão "Basic Auth".
A seguir, o arquivo utilizado para fazer isto de uma forma bem simples:
{
auto_https off
}
:8080 {
route /_health* {
respond 200
}
route {
basic_auth / {
USER_NAME HASH_PASSWORD
}
root * /var/www/static
file_server
}
}
Explicando um pouco sobre a configuração:
Desabilitando SSL
auto_https off
Desabilita a emissão automática de certificado e desabilita o redirecionamento para HTTPS.
Porta
:8080 {
# ...
Porta que será aberta para receber conexões.
Health check
route /_health* {
respond 200
}
Rota para acesso ao health check com acesso público.
Arquivos estáticos com autenticação
route {
basic_auth / {
USER_NAME HASH_PASSWORD
}
root * /var/www/static
file_server
}
Esta parte da configuração irá receber todo restante das requests, interceptar as requisições e forçar um login, caso o usuário não esteja logado, e servir os arquivos do diretório /var/www/static
.
O valor USER_NAME
é o nome do usuário que será usado para autenticar.
O valor HASH_PASSWORD
é o hash gerado pelo CLI do Caddy com base na senha definida. Para gerar este valor, basta seguir as instruções na documentação oficial basic_auth.
Conclusão
Esta configuração do Caddy Server oferece uma solução elegante para servir arquivos estáticos com autenticação, ao mesmo tempo que permite um endpoint de health check público. A flexibilidade e simplicidade do Caddy tornam-no uma excelente escolha para diversos cenários de deploy.