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: