Caddy v2 als Proxy

Warum Caddy und nicht nginx?
Caddy ist quasi ein “oneline” Textdokument, welches nach der Installation alle Aufgaben für SSL-Certifikate von Letsencrypt automatisch abruft und aktualisiert. “Installieren und vergessen” ist hier das Zauberwort.
Installation
Zunächst müssen unter Apt-Distros die Repositorys und Schlüssel geholt werden, Repository update und danach die Installation:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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 caddy
Ports am Router/Firewall freigeben
Caddy benötigt zwingend den Port 80 und Port 443. Also den http Port und den https Port. Auch wenn man annimmt, dass andere Webservices diese Ports benötigen. Diese Webservices sollten dann auf höhere Ports umgestellt werden (vierstellig z.B.)
Caddyfile editieren
Für die Configuration ist nur eine Datei notwendig. Die Caddyfile Datei:
sudo nano /etc/caddy/Caddyfile
Der hier enthaltende Erklärungstext kann quasi komplett entfernt werden. Wir benötigen lediglich den folgenden Aufbau:
sub.domain.de {
reverse_proxy 192.168.1.21:3333
}
sub.domain.de durch die eigene Domain ersetzen sowie die IP-Nummer und den Port. Es gilt vorher zu testen ob diese IP+Port aktuell auch wirklich zu dem gewünschten Webservice führen.
Caddy systemd ausführen
Um nun Caddy als systemd Service zu nutzen ist es notwendig den systemd service zum Einen zu aktivieren:
sudo systemctl enable caddy.service
dann den Service starten:
sudo systemctl start caddy.service
und zu guter Letzt jede Änderung der Caddyfile benötigt einen Neustart des Services, das wird wie folgt gelöst:
sudo systemctl reload caddy.service
Um den Status zu überprüfen auf eventuelle Fehlermeldungen ist folgende Eingabe notwendig:
sudo systemctl status caddy.service
Caddy zusätzliche Variablen und Extras
file_server ist z.b. eine Variable die gerne bei Cloud Anwendungen notwendig ist. Andere Webdienste wie dieses Wiki oder auch Blogs wie Wordpress benötigen kleinere Funktionsergänzungen:
sub.domain.de {
reverse_proxy 192.168.1.21:3333
encode zstd gzip
header / {
Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"
X-Content-Type-Options "nosniff"
X-XSS-Protection "1; mode=block"
X-Robots-Tag "none"
X-Download-Options "noopen"
X-Permitted-Cross-Domain-Policies "none"
Referrer-Policy "no-referrer"
}
}
Dies ist beispielhaft für die HSTS Funktionalität, preload in Browsern sowie gzip Komprimierung. Letztendlich alles Verbesserungen für die Geschwindigkeit.
Quellenangaben
https://caddyserver.com/docs/install#debian-ubuntu-raspbian
Bonus: Caddy in Docker-Compose
Wer keine Bare-Metal Installation möchte, kann Caddy auch mit Docker-Compose installieren. Dies hat u.A. den Vorteil, sehr einfach DNS-over-Quic zu nutzen bzw. http/3. Der Trick ist als Port auch 443/udp einzusetzen. Wichtig ist nur daran zu denken auch 443 udp in den entprechenden Firewall-Einträgen zu ergänzen. Danach werden quasi alle Dienste und Webdeploys per http/3 im Netz verfügbar gemacht (mit Fallback auf http/2 natürlich)
services:
caddy_reverse_proxy:
image: caddy:latest
restart: unless-stopped
container_name: caddy_proxy
ports:
- 80:80
- 443:443
- 443:443/udp
volumes:
- .Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
networks:
- caddy_net
volumes:
caddy_data: null
caddy_config: null
networks:
caddy_net: null
Man kann auch gerne meinen Blog auf http/3 Funktionalität überprüfen: