Für Heimanwender und Hobby-Admins ist Apache der bekannteste Webserver. Die Administration ist vergleichsweise unkompliziert, es gibt unzählige Module und alles ist gut dokumentiert. Auf vielen Linux-Servern bei Providern ist Apache schon vorinstalliert und wird als Quasistandard angesehen. Ebenfalls häufig ist Nginx anzutreffen, der besonders performant ist, aber als Webserver mit PHP oder anderen Script-Interpretern über ein CGI anspruchsvoller in der Konfiguration ist.
Zu diesem Duo gesellt sich nun ein weiterer Webserver: Caddy verspricht einfache Einrichtung für kleine Websites und nimmt Admins die Aufgabe ab, ein gültiges TLS-Zertifikat einzurichten.
Die Besonderheiten von Caddy
Wozu noch ein Webserver? Caddy entstand ursprünglich auch als Hilfswerkzeug für Go-Entwickler und ist selbst in Go geschrieben. Diese C-ähnliche Programmiersprache ist in der Entwicklung von Netzwerkprogrammen und Apps mit Weboberfläche beliebt geworden, denn es stehen dafür viele Bibliotheken bereit. Caddy ist als Webserver entstanden, der Go-Apps schnell online bringt. Die Einrichtung ist kurz und knapp, mit sinnvollen Standardeinstellungen.
Caddy gibt es als Open-Source-Software für Linux, Windows, Mac-OS und sogar als kleine Binary, die alle Go-Bibliotheken mitbringt. Die Linux-Version für ARM läuft auch auf Ein-Platinen-Computern wie Raspberry Pi und Co. Insgesamt kann Caddy sieben Jahre Entwicklungsarbeit und zwei Hauptversionen vorweisen, wobei der Webserver in Version 2.0 nochmal komplett neu geschrieben wurde.
Caddy besteht im Wesentlichen aus drei Komponenten, dem ausführbaren Programm, einer Kernbibliothek für HTTP/HTTPS und den grundlegenden Erweiterungen für diese Protokolle. Hinzu kommen optionale Module für Script-Interpreter und Extradienste.
Schneller Einstieg: Site mit HTTPS

Minimale Konfiguration: Mit diesen wenigen Angaben funktioniert eine statische Webseite schon, hier mit „example. com“, für die Caddy TLS-Zertifikate von Let’s Encrypt einrichtet.
IDG
In den Paketquellen von Debian 11 und Ubuntu 22.04 ist Caddy noch nicht vertreten, wohl aber schon in Fedora und Open Suse. Das ist aber für Debian/Ubuntu nur ein kleines Hindernis, denn es gibt Paketquellen der Entwickler. Um diese zu nutzen, installiert auf diesen Systemen zunächst das Kommando
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https -y
die Signaturen der Distribution und
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
die Signatur für die Caddy-Pakete. Das Kommando
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
ergänzt die Quellen von Caddy. Danach installiert der Paketmanager mit
sudo apt update
sudo apt install caddy
den Webserver. Der Befehl
sudo systemctl enable --now caddy
aktiviert Caddy dann als Systemd-Dienst und startet dabei den Webserver sofort. Ein erster Test sollte in einem Browser unter „http://[Server-IP]“ eine allgemeine Willkommensseite anzeigen. Der nächste Schritt ist auch gleich die Einrichtung eines TLS-Zertifikats, weil dies zu den Spezialgebieten des Caddy gehört. Dazu ist bei einem Server, der schon einen öffentlichen Domainnamen hat, nur eine Zeile Konfiguration nötig: Mit
sudo nano /etc/caddy/Caddyfile
öffnet man die Konfiguration des Webservers in einem Texteditor (hier Nano). In der übersichtlichen Datei ändert man die Angabe „:80“ am Zeilenanfang (Konfigurationsblock für den Webserver) :
80 {
zum Domainnamen des Servers, hier „example.com“:
example.com {
Jetzt ist noch ein Neustart von Caddy über den Befehl
sudo systemctl restart caddy
fällig und ein Besuch der Willkommenswebseite. Diese liegt nun mit HTTPS vor. Das Zertifikat von Let’s Encrypt hat Caddy nämlich im Hintergrund selbst bezogen und eingerichtet. Auch die regelmäßigen Erneuerungen wird dieser Webserver automatisch erledigen. Das heißt: Nie wieder abgelaufene TLS-Zertifikate!
Nun ist die Standard-Seite (unter „/usr/ share/caddy“) natürlich nicht das, was Caddy im Web ausliefern soll. Für statische Seiten ohne PHP und andere Scripts ist noch die Angabe des Wurzelverzeichnisses für die gewünschten Inhalte nötig. In der Datei „/etc/caddy/Caddyfile“ ändert man dazu die Zeile
root * /usr/share/caddy
beispielsweise so:
root * /var/www/html
Danach liefert der Webserver, nach einem obligatorischen Neustart von Caddy, die statischen Inhalte aus dem Verzeichnis „/var/www/html“ aus.
Dynamische Seiten: Caddy mit PHP

Nginx, Apache und Caddy im Vergleich: Die Benchmarks wurden ohne Cache und Optimierung gemessen (mit „Siege“). Caddy ist mit PHP etwas performanter als Apache.
IDG
Auch wenn es um die Ausführung von PHP geht, hält Caddy die Basiskonfiguration kurz. Der Webserver verlangt eine ähnliche Konfiguration wie Nginx, denn es gibt kein internes PHP-Modul wie bei Apache. Stattdessen muss PHP als FPM (Fast-CGI Process Manager) eingebunden werden. Dies ist ein separater PHP-Prozess, mit dem Caddy dann per Unix-Socket kommuniziert. Die Minimalkonfiguration ohne Performanceoptimierungen ist mit einer einzigen Zeile erledigt. Zur Demonstration einer PHP-Testseite installiert das Kommando
sudo apt install php-fpm
zunächst PHP 8.x als FPM. In die Konfigurationsdatei kommt nun unter die Zeile „root * /var/www/html“ folgende Angabe:
php_fastcgi unix//run/php/php8.1-fpm.sock
Nach einem Neustart von Caddy gibt dieser nun alle Anfragen an PHP weiter. Falls abweichend von diesem Beispiel nicht PHP 8.1 installiert ist, so liefert das Kommando
ss -x -a | grep php
den tatsächlichen Namen des Unix-Sockets, auf dem PHP verfügbar ist – etwa „/run/ php/php8.2-fpm.sock“. Nach der Anbindung von PHP kann Caddy eine übliche Demodatei wie „info.php“ mit dem Inhalt im Browser anzeigen.
Dies ist dann aber nur eine Minimalkonfiguration. Wer mit Caddy etwa ein WordPress betreiben will, braucht ein paar PHP-Module aus den Paketquellen mehr. Es ist außerdem empfehlenswert, aus Caddy mit PHP noch ein paar mehr Optimierungen herauszuholen und statische Dateien nicht über den PHP-FPM-Prozess auszuliefern, sondern direkt.
Eine weiterführende deutschsprachige Anleitung für performante PHP-Konfiguration findet sich hier.
Mehr zum Webservern:
Apache: So installieren und nutzen Sie den Webserver in Linux
Einbrüche am Server erkennen – so geht’s