Traefik: Datenverkehr auf einen anderen Server weiterleiten
Als Vorbereitung für das Übersiedeln meiner Websites habe ich nach einer Möglichkeit gesucht den kompletten Datenverkehr vom alten Server einfach auf den neuen weiterzuleiten.
DNS-Eintrag ändern
Bisher habe ich nach dem Übertragen meiner Websites auf einen neuen Server nur den DNS-Eintrag geändert und gewartet bis dieser überall aktiv war. Innerhalb einer gewissen Übergangsphase landeten die Zugriffe dabei teils noch am alten, teils schon am neuen Server. Klar kann vorbereitend die TTL der DNS-Einträge verkleinert und somit die Übergangszeit zumindest für einen Großteil der Zugriffe minimiert werden, dennoch bleibt eine gewisse Zeit, in der die Versionsstände der Server etwas auseinanderdriften.
Um die Downtime beim Serverwechsel möglichst gering zu halten, habe ich den Datenverkehr vom alten Server dieses Mal einfach auf den neuen weitergeleitet.
Alle Anfragen vom alten auf den neuen Server weiterleiten
Ich habe alle Docker-Volumes: Traefik Reverse Proxy + Let´s Encrypt inklusive aller Websites mit rsync auf den neuen Server kopiert und dort aktiviert. Damit alle Zugriff am Ziel-Server landen, habe ich die Traefik-Einstellungen am Quell-Server ersetzt. Mit dem folgenden Setup können über die IP-Adresse des alten Servers, alle Zugriffe auf den neuen Server weitergeleitet werden und somit die Zeit bis die DNS-Änderungen flächendeckend bekannt sind überbrückt werden:
Traefik docker-compose.yml
version: "3.3"
services:
traefik:
image: "traefik:v2.8"
container_name: "traefikforward2"
ports:
- "80:80"
- "443:443"
volumes:
- "./traefik.yml:/etc/traefik/traefik.yml"
Traefik sucht in /etc/traefik nach einer traefik.yml-Datei und versucht diese zu laden:
traefik.yml
Die folgende Traefik-Konfiguration leitet http und https-Anfragen komplett auf einen anderen Server. Die IP-Adresse für die Umleitung ist hier mit dem Platzhalter ???.???.???.??? befüllt und muss entsprechend der IP-Adresse des Zielservers angepasst werden. Durch die Option tls: passthrough wird der komplette Datenverkehr verschlüsselt weitergeleitet und somit dem Ziel-Server überlassen.
providers:
file:
filename: /etc/traefik/traefik.yml
accessLog: {}
log:
level: DEBUG
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
tcp:
routers:
router4web:
entryPoints:
- web
service: web-forward
rule: "HostSNI(`*`)"
router4websecure:
entryPoints:
- websecure
service: websecure-forward
rule: "HostSNI(`*`)"
tls:
passthrough: true
services:
web-forward:
loadBalancer:
servers:
- address: "???.???.???.???:80"
websecure-forward:
loadBalancer:
servers:
- address: "???.???.???.???:443"
Durch das Anpassen der Rule "HostSNI(`*`)" eines Routers könnten auch nur bestimmte Websites weitergeleitet werden (* erlaubt alle Domain-Namen). Natürlich können mit dem Setup auch weitere Ports, wie zum Beispiel 25 beim Betrieb eines Mailservers angegeben werden. Ich habe die Traefik-Konfiguration (traefik.yml) absichtlich schlank gehalten, damit diese noch übersichtlich bleibt. Der Inhalt der traefik.yml Datei ist ein einfaches Beispiel und hat mir geholfen die einzelnen Traefik-Services besser zu verstehen:
Die entryPoints legen die Zugriffe, als Beispiel auf bestimmte Ports fest. Ein Zugriff über einen entryPoint kann dann von einem Router verarbeitet und an ein Service übergeben werden.
Forwarder starten
Der Start erfolgt aus dem Ordner mit den zuvor angelegten Dateien mit dem Befehl docker compose up:
docker compose up -d
Zugriffe kontrollieren
In der traefik.yml-Datei habe ich das Loglevel auf "DEBUG" gesetzt um eingehende Zugriffe in der Ausgabe des Docker-Containers beobachten zu können. Die Aufrufe können einfach mit "docker logs" angezeigt werden:
docker logs traefikforward2 -f
Ausgabe:
Siehe auch, Praxisbericht zum Übersiedeln meines Webservers: alle Docker-Container übersiedeln
Weitere Informationen zu meinem Traefik-Setup, siehe auch: sichere https Verbindung: Traefik Reverse Proxy + Let´s Encrypt
{{percentage}} % positiv