Willkommen!
Heute beschäftigen wir uns mit Caddy Proxy. Caddy hat mehrere Funktionen die z.B eine Reverse Proxy mit beinhaltet. Eine Proxy kann man sich in etwa so vorstellen, dass die Reverse Proxy vor der eigentlichen Webseite als A oder AAAA Domain Record hinterlegt wird, und diese dann im Anschluss die Webseite für den Benutzer öffnet.
Ich habe dies bereits getestet gehabt und es gibt natürlich auch .json Formate zur Konfiguration der Caddy oder auch im CLI Format.
Natürlich werde ich Beispiel Code hier einfügen um die Caddy Proxy besser verstehen zu können 🙂
1. So installierst Du die Caddy Proxy
Zunächst kann Caddy für dieses Tutorial am besten auf ein Debian/Ubuntu System installiert werden.
Stable Release:
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 caddy -y
Jetzt haben wir die Caddy Proxy auf unserem Linux System installiert.
2. CLI Befehle und Bash / Systemd
Möchten wir z.B eine kleine Applikation selbst hosten sei es auf dem gleichen Server oder von extern und dann reversen, ist es in Hand um drehen möglich dies auch umzusetzen.
# Eine HTTPS URL aufsetzen
caddy reverse-proxy --from https://example.com:443 --to 127.0.0.1:8000
Der erste Befehl über CLI Variante ist einfach: Caddy als => Reverse Proxy Modus => von example.com (HTTPS) => zu Ziel 127.0.0.1:8000
Somit würde 127.0.0.1:8000 auch über die Caddy Proxy direkt erreichbar sein über https://example.com.
# Eine HTTPS URL aufsetzen mit anderen Haupt Port
caddy reverse-proxy --from https://example.com:8080 --to 127.0.0.1:8000
Somit würde 127.0.0.1:8000 auch über die Caddy Proxy direkt erreichbar sein über https://example.com:8080.
2.1 Caddy CLI als einfachen Autorun Skript
Für Stufe 1 nutzen wir aktuell noch den CLI Modus und schreiben dafür ein Bash Skript sowie ein Systemd Service:
mkdir -p /opt/caddy_run
nano /opt/caddy_run/domain.cat --> Tragt nur den 1x Sub/Domain Namen ein.
nano /opt/caddy_run/run-caddy.sh
Tipp!:
Nutzt nano für das bearbeiten einzelner dateien => STRG+O = Speichern
Und zum verlassen des Editors: STRG+X
#!/bin/bash
if [ -z $1 ]; then
echo "Parms: ./run-caddy.sh <start/stop>"
exit
fi
if [ $1 = "start" ]; then
domain=$(<"/opt/caddy_run/domain.cat")
sudo apt-get install screen -y
sudo screen -AmdS caddy-Proxy caddy reverse-proxy --from https://$domain:3030 --to http://127.0.0.1:8000 --change-host-header
echo "Started... Caddy-Proxy"
fi
if [ $1 = "stop" ]; then
sudo screen -X -S "caddy-Proxy" quit
echo "Stopped... Caddy-Proxy"
fi
nano /etc/systemd/system/caddy-autoself.service
[Unit]
Description=Caddy Autorun
[Service]
type=simple
ExecStart=/bin/bash /opt/caddy_run/run-caddy.sh start
RemainAfterExit=yes
ExecStop=/bin/bash /opt/caddy_run/run-caddy.sh stop
WorkingDirectory=/opt/caddy_run
[Install]
WantedBy=multi-user.target
systemctl enable caddy-autoself.service --now
Das wäre einer von den einfachsten selbst gemachten Funktionen, jedoch bietet es für weitere Reverse Proxy Einstellungen wenig freiraum oder? 🙂
3. Caddy mit .json Config konfigurieren
nano config.json
{
"apps": {
"http": {
"servers": {
"application": {
"listen": ["0.0.0.0:443"],
"routes": [
{
"match": [{"host": ["a.janhill.eu"]}],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{"dial": "localhost:8080"}
]
}
]
},
{
"match": [{"host": ["b.janhill.eu"]}],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{"dial": "localhost:3000"}
]
}
]
}
],
"automatic_https": {
"disable": false
}
}
}
}
}
}
caddy validate --config config.json
# Output sollte am Ende sein
Valid configuration
caddy run --config config.json
Hier sehen wir folgendes:
- listen => 0.0.0.0:443
- host1 => a.janhill.eu
- host2 => b.janhill.eu
- Modus => Reverse Proxy 2x
- Reverse Host1 zu: localhost:8080
- Reverse Host2 zu: localhost:3000
- Automatische SSL Zertifizierung => aktiv
Bitte beachtet die Examples zu euren Domain Daten abzuändern und zudem auch die weiteren Anpassungen vorzunehmen wie Ziel Host richtig setzen, A oder AAAA IP Record in eurer Domain zu setzen.
A => Für IPv4
AAAA => Für IPv6
In euren Domain Einstellungen.
Da ich mich aktiv mit der Caddy Proxy zurzeit beschäftige, werde ich den Beitrag immer weiter erweitern 🙂