Caddy als webserver en reverse proxy: installatie, configuratie en gebruik
Caddy als webserver en reverse proxy: installatie, configuratie en gebruik
Dit artikel legt uit wat Caddy is, hoe je het installeert en configureert voor statische bestanden en reverse proxy, inclusief integratie met Authelia. Het is bedoeld voor ontwikkelaars en systeembeheerders die een moderne webserver met automatische HTTPS willen opzetten.
Vereisten
- Een Linux-server (Debian, Ubuntu, Fedora of CentOS) met root-toegang of sudo-rechten - Een domeinnaam die naar het IP-adres van de server wijst (voor HTTPS via Let's Encrypt) - Basiskennis van de commandoregel - Caddy versie 2.7 of nieuwer (versie 2.8 bevat verbeterde HTTP/3-ondersteuning)
Wat is Caddy?
Caddy is een open-source webserver geschreven in Go. Het onderscheidt zich door automatische HTTPS: Caddy vraagt en vernieuwt TLS-certificaten zelf via Let's Encrypt, zonder handmatige configuratie. Dit werkt out-of-the-box voor zowel simpele bestandsservers als complexe reverse proxy-opstellingen.
Caddy ondersteunt HTTP/2 en HTTP/3. HTTP/3 draait op het QUIC-protocol en presteert beter bij onstabiele netwerkverbindingen. Deze protocollen zijn standaard ingeschakeld en vereisen geen extra configuratie.
Stappen
1. Installeer Caddy via het systeempakketbeheer
Caddy biedt officiële pakketten voor de belangrijkste Linux-distributies. Voor Debian/Ubuntu:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddyVoor Fedora/RHEL:
sudo dnf install 'dnf-command(copr)'
sudo dnf copr enable @caddy/caddy
sudo dnf install caddy2. Start Caddy als systeemservice
Caddy draait als service en start automatisch bij het opstarten van het systeem:
sudo systemctl enable --now caddy
Controleer of de service draait:
sudo systemctl status caddy
3. Configureer een eenvoudige file server met de Caddyfile
De Caddyfile is het configuratiebestand van Caddy. Het gebruikt een leesbare syntax voor routes, proxy-instellingen en certificaten. Maak een basisconfiguratie voor een statische bestandsserver:
sudo nano /etc/caddy/Caddyfile
Vervang de inhoud door:
example.com {
root * /var/www/html
file_server browse
}Vervang `example.com` door je eigen domeinnaam. De `file_server browse`-directive maakt een browsbare interface die de inhoud van de directory toont. Dit is handig voor tijdelijke bestandsdeling of ontwikkelomgevingen.
4. Configureer Caddy als reverse proxy
Caddy kan verkeer doorsturen naar andere services op basis van URL-paden of hostnamen. Dit is nuttig wanneer meerdere applicaties op één server draaien. Voeg een reverse proxy-regel toe aan de Caddyfile:
app.example.com {
reverse_proxy localhost:8080
}Dit stuurt al het verkeer voor `app.example.com` door naar de service op poort 8080. Voor path-based routing:
example.com {
handle /api/* {
reverse_proxy localhost:3000
}
handle {
root * /var/www/html
file_server
}
}5. Bouw Caddy met plugins via xcaddy
Voor uitbreidingen zoals specifieke DNS-providers bij certificaatvernieuwing gebruik je xcaddy. Dit hulpmiddel compileert Caddy vanuit de broncode met een gekozen set modules:
sudo apt install golang-go
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latestBouw Caddy met een DNS-plugin, bijvoorbeeld voor Cloudflare:
xcaddy build --with github.com/caddy-dns/cloudflare
Dit produceert een binair bestand `caddy` in de huidige directory. Je kunt ook een specifieke Caddy-versie kiezen:
xcaddy build v2.7.6 --with github.com/caddy-dns/cloudflare
6. Integreer Authelia voor authenticatie
Authelia is een open-source authenticatieserver die two-factor authentication en single sign-on (SSO) biedt. Plaats Authelia achter Caddy om webapplicaties te beveiligen. Voeg in de Caddyfile toe:
secure.example.com {
forward_auth localhost:9091 {
uri /api/authz/forward-auth
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
}
reverse_proxy localhost:8080
}Caddy stuurt verkeer eerst naar Authelia op poort 9091. Alleen geverifieerde gebruikers krijgen toegang tot de applicatie op poort 8080.
7. Herstart Caddy na configuratiewijzigingen
Na elke wijziging aan de Caddyfile moet je Caddy herstarten:
sudo systemctl reload caddy
Caddy valideert de configuratie en past deze toe zonder de service te onderbreken.
Verificatie
Controleer of Caddy correct draait en HTTPS actief is:
curl -I https://example.com
De output moet `HTTP/2 200` of `HTTP/3 200` tonen. Voor een reverse proxy-check:
curl -I https://app.example.com
Controleer de logs voor certificaat- en proxy-issues:
sudo journalctl -u caddy --since "5 minutes ago"
Veelgestelde problemen
1. Caddy kan geen certificaat aanvragen bij Let's Encrypt. Controleer of je domeinnaam naar het juiste IP-adres wijst en dat poort 80 en 443 openstaan in de firewall. Voer `sudo ufw allow 80,443/tcp` uit als je UFW gebruikt.
2. HTTP/3 werkt niet. HTTP/3 vereist dat poort 443 UDP openstaat. Controleer dit met `sudo ufw allow 443/udp`. Sommige netwerken blokkeren QUIC-verkeer; test dan met een andere verbinding.
3. De reverse proxy geeft een 502 Bad Gateway. De backend-service draait niet of luistert op een ander adres of poort. Controleer met `sudo ss -tlnp | grep 8080` of de service daadwerkelijk op poort 8080 draait.
Caddy combineert eenvoudige configuratie met geavanceerde functionaliteit zoals automatische certificaatvernieuwing en HTTP/3. De keuze tussen de Caddyfile en JSON-configuratie bepaalt hoe ver je wilt gaan in controle — en die afweging blijft per implementatie verschillen.