DEV Community

Edimar Cardoso for Quave

Posted on

Configurando Caddy: Arquivos Estáticos e Autenticação Básica atrás de um Load Balancer

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
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicando um pouco sobre a configuração:

Desabilitando SSL

auto_https off
Enter fullscreen mode Exit fullscreen mode

Desabilita a emissão automática de certificado e desabilita o redirecionamento para HTTPS.

Porta

:8080 {
# ...
Enter fullscreen mode Exit fullscreen mode

Porta que será aberta para receber conexões.

Health check

    route /_health* {
        respond 200
    }
Enter fullscreen mode Exit fullscreen mode

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
    }
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)