Marvin Pascale

[B.Log]

08 Gennaio 2025

Caddy Server

Caddy Server

Oggi voglio parlarvi di Caddy, un server web moderno che, negli ultimi anni, si è guadagnato un posto speciale nel cuore degli appassionati di tecnologia, open-source e semplicità. Se siete abituati a configurare server web come Apache o Nginx, preparatevi a scoprire un’alternativa che potrebbe semplificarvi la vita, senza rinunciare a potenza e flessibilità.

Cos’è Caddy?

Caddy è un server web open-source scritto in Go. La sua particolarità? Si distingue per la sua configurazione intuitiva, un supporto nativo per HTTPS e funzionalità integrate che spesso richiedono plugin o configurazioni complesse in altri server web.

Perché scegliere Caddy?

  • HTTPS by default: Caddy gestisce automaticamente i certificati TLS grazie a Let’s Encrypt. Basta un semplice comando per avere un sito web sicuro;
  • configurazione semplice: il file di configurazione, chiamato Caddyfile, è incredibilmente leggibile e richiede poche righe per configurare un sito;
  • performance: grazie alla sua architettura moderna, è estremamente efficiente e scalabile;
  • supporto integrato per reverse proxy: perfetto per chi vuole gestire microservizi o backend multipli;
  • multipiattaforma: funziona su Linux, Windows, macOS e persino su piattaforme embedded.

Mani in pasta

Vediamo come iniziare ad usare Caddy in pochi passaggi.

Installazione

Caddy è disponibile come binario standalone, oppure potete installarlo tramite il package manager della vostra distribuzione.

Su Debian GNU/Linux:

# apt install -y debian-keyring debian-archive-keyring apt-transport-https
# curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | tee /usr/share/keyrings/caddy-archive-keyring.asc
# curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
# apt update
# apt install caddy

Su macOS (con Homebrew):

$ brew install caddy

Verifica:

Dopo l’installazione, verificate che tutto funzioni con:

# caddy version

Configurazione di base

Caddy utilizza un file di configurazione chiamato Caddyfile che potete create dove vi è più comodo. Ecco un esempio semplice:

example.com {
    root * /var/www/html
    file_server
}

Questa configurazione:

  • serve i file statici dalla directory /var/www/html;
  • configura automaticamente HTTPS per example.com.

Per avviare il server, basta eseguire:

caddy run

all’interno della folder dove avete creato il Caddyfile.

Reverse Proxy con Caddy

Un caso d’uso comune per Caddy è quello di agire come reverse proxy. Ecco un esempio di configurazione per inoltrare le richieste a un’app backend in ascolto sulla porta 8080:

example.com {
    reverse_proxy localhost:8080
}

Caddy si occuperà di tutto, inclusa la gestione del certificato TLS e l’ottimizzazione delle connessioni.

Logging e Monitoring

Caddy include un supporto integrato per logging e metriche. Ecco come abilitare il logging nel Caddyfile:

example.com {
    root * /var/www/html
    file_server
    log {
        output file /var/log/caddy/access.log
        format json
    }
}

Per avere le metriche, potete usare strumenti come Prometheus configurando un endpoint per estrapolare i dati.

Sicurezza

Non possiamo di certo dimenticarci della sicurezza. Con Caddy possiamo utilizzare Crowdsec grazie al plugin pronto all’uso.

Installiamo il necessario

# Bouncer layer 7
go get github.com/hslatman/caddy-crowdsec-bouncer/http

# Connessioni layer 4 (TCP/UDP)
go get github.com/hslatman/caddy-crowdsec-bouncer/layer4

# Non dimentichiamoci del WAF
go get github.com/hslatman/caddy-crowdsec-bouncer/appsec

File di configurazione in json

{
  debug

  crowdsec {
    api_url http://localhost:8080
    api_key <api_key>
    ticker_interval 15s
    appsec_url http://localhost:7422
    #disable_streaming
    #enable_hard_fails
  }

  layer4 {
    localhost:4444 {
      @crowdsec crowdsec
      route @crowdsec {
        proxy {
          upstream localhost:6443
        }
      }
    }
  }
}

localhost:8443 {
  route {
    crowdsec
    respond "Allowed by Bouncer!"
  }
}

localhost:7443 {
  route {
    appsec
    respond "Allowed by AppSec!"
  }
}

localhost:6443 {
  route {
    crowdsec
    appsec
    respond "Allowed by Bouncer and AppSec!"
  }
}

In alternativa c’è un progetto creato e manutenuto da Fabrizio Salmi che permette di creare un WAF personalizzato per Caddy.

Come si legge nel readme del progetto, Fabrizio ha creato un “semplice middleware” Web Application Firewall (WAF), progettato per fornire una protezione completa contro gli attacchi. Questo middleware si integra perfettamente con Caddy e offre un’ampia gamma di funzionalità di sicurezza per salvaguardare le tue applicazioni. Per utilizzarlo bisogna essere un po’ più dentro le tematiche di sicurezza ma il readme è ben scritto e dettagliato.

Caddy nel Mondo Reale

Caddy si presta a una vasta gamma di utilizzi:

  • hosting di siti statici: perfetto per progetti statici come quelli generati da Hugo o Jekyll;
  • reverse proxy per container docker: caddy si integra bene con orchestratori come Docker Swarm o Kubernetes;
  • applicazioni serverless: grazie alla sua leggerezza e velocità, è ideale per ambienti serverless.

Conclusioni

Caddy rappresenta un’alternativa moderna e semplice ai server web tradizionali. La sua filosofia “batteries included” permette a chiunque, dai principianti agli esperti, di configurare e gestire server web in modo rapido e sicuro.

Se non lo avete ancora provato, vi consiglio di dargli una possibilità. Potrebbe diventare il vostro nuovo strumento preferito per il web hosting!


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: