Traefik: Datenverkehr auf einen anderen Server weiterleiten

This page is also available in English

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. 

Die TTL (Time to Live) ist eine Eigenschaft eines jeden DNS-Eintrags und gibt vor, in welchen Abständen andere DNS-Server diesen auf eine Änderung kontrollieren sollen. Je nach Auslastung der DNS-Server wird der Wert in der Praxis nicht immer eingehalten, speziell, wenn die Zeit auf wenige Minuten gestellt wird. Übliche TTL-Werte sind 86400 Sekunden (24 Stunden) oder 3600 Sekunden (1 Stunde)

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:

Für das Setup habe ich zwei Dateien angelegt: docker-compose.yml und traefik.yml:

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 xxx.xxx.xxx.xxx 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: "xxx.xxx.xxx.xxx:80"

    websecure-forward:
      loadBalancer:
        servers:
          - address: "xxx.xxx.xxx.xxx: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:

📢 Hier wird voraussichtlich am 06.11.2022 ein neuer Beitrag verlinkt werden: Praxisbericht zum Übersiedeln meines Webservers. Push-Nachrichten erlauben?

Weitere Informationen zu meinem Traefik-Setup, siehe auch: sichere https Verbindung: Traefik Reverse Proxy + Let´s Encrypt

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Veröffentlichung: 12.09.2022 von Bernhard


Top-Artikel in diesem Bereich


ioBroker installieren - Docker
Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ
Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt...

Conbee 2: Phoscon deCONZ - Docker Inbetriebnahme | Review
Mit dem kleinen USB-Stick Conbee2 habe ich meinen NAS um ein Zigbee-Gateway erweitert. Conbee2 kann auf Raspbian, Ubuntu, Docker oder Windows installiert werden.

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details