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
#!/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 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert