sichere https Verbindung: Traefik Reverse Proxy + LetÂŽs Encrypt

FĂŒr nahezu alle bekannten Websysteme gibt es fertige Docker-Container, bzw. können diese relativ einfach selbst erstellt oder bestehende Container angepasst werden. Als Docker-Container können die Webservices sehr einfacher installiert und betrieben werden. Wer einen Webservice ĂŒber das Internet veröffentlicht, sollte dafĂŒr heute unbedingt eine verschlĂŒsselte Verbindung (SSL) anbieten. Um den Zugriff auf einen oder mehrere Container zu regeln, kann ein Reverse-Proxy mit kostenlosen Let’s Encrypt-Zertifikaten fĂŒr das SSL-Offloading verwendet werden, siehe auch: eigener Webserver – wie funktioniert eigentlich das Internet? Um Webservices vom Heimnetzwerk ĂŒber das Internet zu VerfĂŒgung zu stellen bietet ev. Cloudflare eine einfachere Alternative zu diesem Setup.

Ziel dieses Beitrags

Der Betrieb von einem oder mehrerer Docker-Webservices (Websites) inklusive HTTPS-VerschlĂŒsselung auf einem Server.
Die Webservices können ĂŒber deren Eigenschaften (Docker-Container-Labels) veröffentlicht und ĂŒber eine eigene WeboberflĂ€che kontrolliert werden.

Aufwand

Lesedauer: ca. 15 Minuten

Voraussetzung

Ein im Internet veröffentlichter Server mit Docker und eine registrierte Webdomain

Vom NGINX Proxy zu Traefik

UrsprĂŒnglich habe ich fĂŒr den Betrieb mehrerer Docker-basierter Webseiten "NGINX Proxy Automation" von Evert Ramos verwendet, siehe: nginx-LetsEncrypt Reverse Proxy in der Praxis. Das Projekt funktioniert wunderbar, hat aber im Vergleich zum alternativen Reverse-Proxy: Traefik einige Limitationen. Mit Traefik ist es gefĂŒhlt noch einfacher und dank des Web-Dashboards ĂŒbersichtlicher mehrere Webseiten auf einem Server zu betreiben. Zahlreiche Middleware bieten zudem zusĂ€tzliche Funktionen.

Schematische Darstellung

Der Traefik-Docker-Container kĂŒmmert sich um das Ausstellen, Verwalten und Verwenden von SSL-Zertifikaten und leitet Webanfragen auf die jeweiligen Webservices, die wiederum auch als Docker-Container bereitgestellt werden.

ⓘ

Traefik kĂŒmmert sich um

      • den Zugriff auf einen oder mehrere Docker-Webanwendungen
      • die Zertifikatsverwaltung fĂŒr eine HTTPS-VerschlĂŒsselung
Hier schematisch dargestellt, anhand der Seiten www.libe.net und www.script-example.com:
Die Websites www.libe.net und www.script-example.com werden von den jeweiligen Docker-Containern betrieben. Die Verbindung vom Internet wird auf der öffentlichen IP-Adresse des Webservers vom Traefik-Container entgegengenommen. Traefik durchsucht alle Docker-Container, ob bestimmte Labels vorhanden sind und veröffentlicht diese anhand derer. Die VerwaltungsoberflĂ€che von Traefik wird auch als Webservice zur VerfĂŒgung gestellt. Da Traefik bei Verwendung von „websecure“ als Label ein SSL-Zertifikat fĂŒr den hinterlegten Host (traefik.http.routers.Webseite.rule=Host(`webdomain.tld`)) und somit fĂŒr den Zugriff auf dessen Container ausstellt und verwaltet, findet die Verbindung vom Browser zur VerwaltungsoberflĂ€che von Traefik verschlĂŒsselt statt. Der Traefik-Container baut eine unverschlĂŒsselte Verbindung zum Container mit dem Webservice auf, wodurch sich der veröffentlichte Webservice nicht um die Zertifikatsverwaltung kĂŒmmern mĂŒssen. Die aktuelle Version des Projektes ist:
SoftwareTraefik
GitHubhttps://github.com/traefik/traefik
aktuelle Version 2.10.4
gefunden26.07.2023

Installation: Server, Domain (DNS) und Docker

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhÀngige isolierte Umgebung:
Beim ersten Start eines Containers, lÀdt Docker selbststÀndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
Als Voraussetzung fĂŒr das Setup benötigen wir natĂŒrlich einen Server und eine Webdomain. Die Webdomain kann idealerweise vom DNS-Server des Providers verwaltet werden. Wer noch keine Domain besitzt, kann diese bei einem der unzĂ€hligen Hosting-Provider bestellen, siehe auch:
eigener Webserver – wie funktioniert eigentlich das Internet?

FĂŒr das hier vorgestellte Setup wird Docker benötigt, siehe: Docker Installation Linux oder Docker Installation Windows. Bei einem Server eines Hosting-Providers kann Docker und das hier vorgestellte Setup ĂŒber eine SSH-Verbindung zum Server und ĂŒber die beschriebenen Bash-Befehle erfolgen. Sollte sich der Server im eigenen Heimnetzwerk befinden, muss am Router ein entsprechendes Port-Forwarding eingerichtet werden, siehe: aus dem Internet verfĂŒgbar machen: Port-Forwarding - OpenWRT. Sollte der Internetprovider die öfftenliche IP-Adresse regelmĂ€ssig Ă€ndern, siehe: free DynDNS Service - Zugriff bei wechselnder öffentlicher IP.

Wer Docker bereits installiert hat und die entsprechenden A-Records in der Domainverwaltung eingetragen hat, benötigt eine Textdatei mit Namen docker-compose.yml und als Vorlage folgenden Inhalt: 

docker-compose.yml

[+]
services:
  traefik:
    image: "traefik:v2.8"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=admin@domain.tld"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
    expose:
      # traefik dashboard port
      - 8080
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.domain.tld`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.tls.certresolver=myresolver"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=traefik-auth"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:??????"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"     
    restart: "always"
networks:
  default:
    name: webproxy
    external: true

Das Beispiel verwendet Bind-Mounts und keine Volumes, siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner.

Anpassen der docker-compose.yml-Datei

Die docker-compose-yml-Vorlage verwendet nicht nur fĂŒr die veröffentlichten Web-Service-Container ein Zertifikat, sondern auch fĂŒr das Traefik-Dashboard, wodurch auch der Zugriff auf das Dashboard verschlĂŒsselt stattfindet. Damit das Dashboard nicht von jedermann aufgerufen werden kann, wurde eine Basic-Authentication mit einem Admin-User hinterlegt.
Vor dem eigentlichen Start muss die Datei natĂŒrlich ein klein wenig angepasst werden:

  • traefik.domain.tld sollte mit einer eigenen DomĂ€ne fĂŒr das Traefik-Dashboard,
  • acme.email mit einer Mailadresse und
  • basicauth.users mit einem eigenen Benutzernamen und einem entsprechenden md5-Kennwort ersetzt werden. 

Anstelle von traefik.domain.tld kann fĂŒr den Zugriff auf das Dashboard eine Subdomain einer vorhandenen Domain verwendet werden. Als Beispiel könnte in der DNS-Zonenverwaltung fĂŒr die DomĂ€ne libe.net ein A-Record fĂŒr eine Subdomain traefik.libe.net auf die IP-Adresse des Webservers erstellt werden. 

NatĂŒrlich muss in der docker-compose.yml-Datei fĂŒr dieses Beispiel auch traefik.libe.net anstelle von traefik.domain.tld verwendet werden. 

Die Mailadresse wird von Let’s Encrypt verwendet, um bestimmte Informationen oder Warnungen zu versenden: Zum Beispiel, falls ein Zertifikat bald ablĂ€uft. Keine Sorge, Traefik kĂŒmmert sich um die VerlĂ€ngerung der Zertifikate, entsprechend sollten E-Mails mit der Information ĂŒber den Ablauf eines Zertifikats ernst genommen werden. 

Das Kennwort fĂŒr die Basic-Authentifizierung kann nicht im Klartext eingetragen werden und muss daher vorab ĂŒber einen Befehl als MD5-Hash erzeugt werden und fĂŒr die Verwendung in docker-compose mĂŒssen einfache $ mit $$ ersetzt werden, siehe: doc.traefik.io/traefik/middlewares/http/basicauth/

In Linux kann dazu folgender Befehl verwendet werden: echo $(htpasswd -nB admin) | sed -e s/\\$/\\$\\$/g

root@Webserver:~# echo $(htpasswd -nB admin) | sed -e s/\\$/\\$\\$/g
New password:
Re-type new password:
admin:$$2y$$05$$7liwlteyGcPyCr2oXc4Do.G/wWxjwWLYpTWg6vvQ4pU7PLAS4ysMm

Anstelle von admin kann hier auch ein anderer Benutzername verwendet werden.

Nach dem Anpassen der Datei können wir den Traefik-Container starten. NachtrĂ€glich gestartete Docker-Container mit den hinterlegten Labels fĂŒr dessen Webservice werden im laufenden Betrieb von Traefik verarbeitet und veröffentlicht.

Start des Traefik-Containers

Als Netzwerk fĂŒr Traefik und fĂŒr die spĂ€ter erstellen Webservices verwende ich ein eigenes Netzwerk mit Namen „webproxy“, welches ich vor dem Start von Traefik (docker-compose up) erstelle:

cd /OrdnerDockerComposeFileTraefik
docker network create webproxy
docker-compose up -d

Sollte alles richtig funktionieren, kann das Traefik-Dashboard ĂŒber die angegebene Domain und nach Eingabe des angegebenen Benutzers aufgerufen werden:

Websites oder Services erstellen und hosten

Wird ein anderer Docker-Container mit dem Netzwerk webproxy und entsprechenden Labels fĂŒr Traefik gestartet, kann dieser ĂŒber Traefik aufgerufen werden.

Wer mehrere Webservices starten will, muss darauf achten, dass unterschiedliche Labels in den jeweiligen Konfigurationen verwendet werden:
z. B. Webservice 1:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice1.rule=Host(`service1.domain.tld`)"          
      - "traefik.http.routers.webservice1.entrypoints=web"
      - "traefik.http.routers.webservice1.entrypoints=websecure"
...

und fĂŒr einen weiteren Docker-Container mit einem anderen Service:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice2.rule=Host(`service2.domain.tld`)"          
      - "traefik.http.routers.webservice2.entrypoints=web"
      - "traefik.http.routers.webservice2.entrypoints=websecure"
...

„web“ als Entrypoint erlaubt den unverschlĂŒsselten Zugriff auf den Service und „websecure“ den verschlĂŒsselten Zugriff ĂŒber HTTPS.

Siehe auch: eigener Webserver - wie funktioniert eigentlich das Internet?

Authentifizierung

Wer fĂŒr einen Container eine simple Basic-Authentifizierung hinzufĂŒgen möchte, kann dies durch das HinzufĂŒgen der Basic-Authentication-Middleware. (gleich dem Traefik-Dashboard)

(Basic-Authentication: Bevor das Dashboard aufgerufen werden kann, muss der hinterlegte Benutzername und das Passwort eingegeben werden)

Die folgende Zeile legt eine Middleware mit Namen: webserver-basic-auth an und definiert damit den Benutzernamen und das Passwort:
      - "traefik.http.middlewares.webserver-basic-auth.basicauth.users=admin:md5Passwort" 

Das Kennwort kann, wie bereits beschrieben mit einem Linux-Befehl in einen md5-Hash umgewandelt werden:
echo $(htpasswd -nB admin) | sed -e s/\\$/\\$\\$/g

Damit der Router, hier mit Namen "webserver" die angelegte Middleware verwendet, habe ich folgende Zeile hinzugefĂŒgt:

      - "traefik.http.routers.webserver.middlewares=webserver-basic-auth"

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webserver.rule=Host(`domain.tld`)"      
      - "traefik.http.routers.webserver.entrypoints=web"
      - "traefik.http.routers.webserver.entrypoints=websecure"
      - "traefik.http.routers.webserver.tls.certresolver=myresolver"   
      - "traefik.http.middlewares.webserver-basic-auth.basicauth.users=admin:md5Passwort" 
      - "traefik.http.routers.webserver.middlewares=webserver-basic-auth"

Alternativ zur Basic-Authentifizierung kann auch ein externer Anmeldeanbieter verwendet werden. Als Beispiel die Verwendung von Google als Anmeldeanbieter, also die Verwendung eines Google-Kontos fĂŒr die Anmeldung auf den eigenen Webservices, siehe: Traefik Google-Authentifizierung.

ZusÀtzliche SAN (Subject Alternative Names)

Damit ein Webzertifikat fĂŒr mehrere Subdomains ausgestellt werden kann, können sogenannte SAN verwendet werden:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice.rule=Host(`domain.tld`,`www.domain.tld`,`dev.domain.tld`,`dev2.domain.tld)"      
      - "traefik.http.routers.webservice.entrypoints=web"
      - "traefik.http.routers.webservice.entrypoints=websecure"
      - "traefik.http.routers.webservice.tls.certresolver=myresolver"     

Umleitungen 

FĂŒr das Umleiten von Subdomains auf eine andere Subdomain, können Regex-AusdrĂŒcke verwendet werden.

Diverse Subdomains und/oder Non-WWW auf WWW umleiten

Das folgende Beispiel leitet alle Subdomains und die Root-Domain (Non-WWW) auf eine URL mit WWW um: 
domain.tld, dev.domain.tld und dev2.domain.tld werden auf www.domain.tld umgeleitet. Damit das Zertifikat auch alle DomĂ€nen-Namen enthĂ€lt, mĂŒssen diese in der Host-Rule angegeben werden:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice.rule=Host(`domain.tld`,`dev.domain.tld`,`dev2.domain.tld`,`www.domain.tld`)"      
      - "traefik.http.routers.webservice.entrypoints=web"
      - "traefik.http.routers.webservice.entrypoints=websecure"
      - "traefik.http.routers.webservice.tls.certresolver=myresolver"     
      
      - "traefik.http.routers.webservice.middlewares=redirect_???2www"
      - "traefik.http.middlewares.redirect_???2www.redirectregex.regex=^https://(dev.|dev2.)?domain.tld(.*)"
      - "traefik.http.middlewares.redirect_???2www.redirectregex.replacement=https://www.domain.tld$${2}"
      - "traefik.http.middlewares.redirect_???2www.redirectregex.permanent=true"

Diverse Subdomains und/oder WWW auf Non-WWW

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice.rule=Host(`domain.tld`,`dev.domain.tld`,`dev2.domain.tld`,`www.domain.tld`)"      
      - "traefik.http.routers.webservice.entrypoints=web"
      - "traefik.http.routers.webservice.entrypoints=websecure"
      - "traefik.http.routers.webservice.tls.certresolver=myresolver"     
      
      - "traefik.http.routers.webservice.middlewares=redirect_www2none"
      - "traefik.http.middlewares.redirect_www2none.redirectregex.regex=^https://(www.|dev.|dev2.)domain.tld(.*)"
      - "traefik.http.middlewares.redirect_www2none.redirectregex.replacement=https://domain.tld$${2}"
      - "traefik.http.middlewares.redirect_www2none.redirectregex.permanent=true"

HTTP auf HTTPS umleiten (nicht global, nur fĂŒr den jeweiligen Container)

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webservice.rule=Host(`domain.tld`,`dev.domain.tld`,`dev2.domain.tld`,`www.domain.tld`)"      
      - "traefik.http.routers.webservice.entrypoints=web"
      - "traefik.http.routers.webservice.entrypoints=websecure"
      - "traefik.http.routers.webservice.tls.certresolver=myresolver"     
      
      - "traefik.http.routers.webservice_http.rule=Host(`domain.tld`,`www.domain.tld`,`dev.domain.tld`)"  
      - "traefik.http.routers.webservice_http.entrypoints=web"
      - "traefik.http.routers.webservice_http.middlewares=redirect-to-https"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"  

FAQ

Was ist ein Reverse-Proxy?

Ein Reverse Proxy nimmt Webanfragen entgegen und leitet diese an dahinterliegende Webservices weiter. Damit die Anfragen an den richtigen Webservice weitergeleitet werden, verwenden die meisten Reverse-Proxys den Host-Header (=Domainnamen). Ein Reverse-Proxy kann zusĂ€tzliche Funktionen fĂŒr einen besseren Schutz, einen optimierten Datenverkehr oder eine zusĂ€tzliche Authentifizierung bieten. 

Wozu wird ein Reverse-Proxy verwendet?

Ein Reverse Proxy wird ĂŒberwiegend fĂŒr den Webzugriff auf einen oder mehrere Webserver vorgeschaltet. Neben dem Verteilen der Anfragen auf mehrere Webservices, wird ein Reverse Proxy hĂ€ufig fĂŒr ein sogenanntes SSL-Offloading verwendet. Der Reverse-Proxy kĂŒmmert sich dabei um das Bereitstellen der Webservices ĂŒber HTTPS und ĂŒbernimmt neben dem VerschlĂŒsseln und EntschlĂŒsseln des Datenverkehrs auch hĂ€ufig das Zertifikatsmanagement. 

Was ist der Unterschied zwischen einem Reverse-Proxy und einem Load Balancer?

Die Aufgabe eines Load Balancer ist primĂ€r die Last zwischen verschiedenen Servern oder GerĂ€ten zu verteilen. Ein Reverse-Proxy kann neben einem Lastausgleich auch noch andere Funktionen wie SSL-Offloading oder Caching und wird ĂŒberwiegend fĂŒr Webserver (HTTP) eingesetzt. Ein Load Balancer hingegen kann auch fĂŒr andere Protokolle verwendet werden. 

Webservices, Beispiele

Hier eine Liste von Webservices, die ich bisher getestet habe:

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

DANKE fĂŒr deine Bewertung!

Aktualisiert: 22.08.2023 von Bernhard | Translation English |🔔 | Kommentare:2

➊ Container | Nginx-LetsEncrypt Reverse Proxy in der Praxis ➚
➊ Home Server | GĂŒnstiger und sparsamer Docker Mini Server fĂŒr zu Hause ➚

Top-Artikel in diesem Bereich


NAS selber bauen: flexibel, stromsparend und gĂŒnstig [HowTo]

Wer nach einem NAS (Network Attached Storage oder Netzwerkspeicher) fĂŒr den Heimgebrauch sucht, kommt an den Herstellern Synology und QNAP nicht vorbei. Beide Hersteller liefern kleine NAS-Komplettlösungen mit der Möglichkeit, Daten lokal oder ĂŒber das Internet zu synchronisieren und beide verlangen fĂŒr die verwendete Hardware nicht gerade wenig Geld.


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.


Bitwarden in Docker betreiben - Setup Schritt fĂŒr Schritt

Bitwarden ist ein webbasierter Passwort-Manager, Ă€hnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite ĂŒberlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche ĂŒber verschiedene Container bereitgestellt werden können. Das relativ aufwĂ€ndige Setup wurde mit "Bitwarden Unified" speziell fĂŒr ein Selbs...

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
26.02.2023 15:45
Hallo, 
schöne Anleitung! Ich habe den Docker Stack auf einer Portainer Instanz auf einem QNAP ausprobiert. Dabei habe ich immer wieder den Fehler "port is missing" bekommen:
level=error msg="service \"traefik-traefik\" error: port is missing" providerName=docker container=traefik-traefik....

Mit dem zusÀtzlichen Label 
- "traefik.http.services.traefik.loadbalancer.server.port=80"
startet Traefik ohne Fehlermeldung. 

Allerdings hab ich es bis jetzt nicht geschafft das Traefik Dashboard aufzurufen. Irgendwas an der Portweiterleitung klemmt. Firewalls hab ich schon ausgeschlossen. Es könnte noch an belegten Ports auf dem QNAP liegen (QNAP: 8080, 443, Portainer: 8443) oder daran, dass ich ein VLAN betreibe. Letzteres schliesse ich eigentlich aus, da ich aus der Shell im Traefik Container z.B. google.de anpingen kann.

FĂŒr Hinweise bin ich dankbar. Vielleicht ist auch das zusĂ€tzliche Label noch nicht korrekt.

Beste GrĂŒĂŸe
Christian
↳
✍anonym
gepostet am 19.03.2023 17:25
Hallo,
nach lÀngerer Suche funktioniert das Traefik Dashboard mit basicAuth jetzt and auch der Traefik/whoami ist erreichbar.

BasicAuth / Dashboard:
Damit ist eigentlich alles in Ordnung. Das Problem liegt bei der Einstellung "expose: 8080" bzw. dem fehlenden loadbalancer. 

ZunĂ€chst zu expose. Da ich noch ziemlich neu in der Docker-Welt bin, ging ich irrtĂŒmlich davon aus, dass dies eine Traefik spezifische Einstellung ist und dass das Dashboard ĂŒber den angegebenen Port 8080 erreichbar sein sollte. TatsĂ€chlich sagt die docker compose reference dazu:

"Expose ports without publishing them to the host machine - they’ll only be accessible to linked services. Only the internal port can be specified."

Das Dashboard ist natĂŒrlich ganz normal ĂŒber den Namen in der Host rule (im Beispiel traefik.domain.tld) erreichbar. Die Frage ist also, fĂŒr was ist die Einstellung "expose: 8080" gut?

Erschwerend kam hinzu, dass ohne den loadbalancer ein Fehler auftritt, der die Erzeugung der Middleware fĂŒr die basicAuth verhindert. Theoretisch sollte Traefik unter Docker automatisch den Port des Servers verwenden, wenn es nur einen gibt:

"Port detection works as follows:

If a container exposes a single port, then Traefik uses this port for private communication.
If a container exposes multiple ports, or does not expose any port, then you must manually specify which port Traefik should use for communication by using the label traefik.http.services.<service_name>.loadbalancer.server.port (Read more on this label in the dedicated section in routing)."

Das scheint nicht ganz zu funktionieren, da jedenfalls bei mir der Fehler auftritt.

Traefik/whoami:
StandardmĂ€ssig startet Traefik/whoami auf Port 80. Ich habe aber versucht, den Server auf Port 443 anzusprechen.  Das kann natĂŒrlich nicht funktionieren.

Hoffe, das hilft dem ein oder anderen. 

Beste GrĂŒĂŸe
Christian

Beitrag erstellt von anonym

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