Nginx als reverse Proxy für Docker-Container

Nachdem ich in meinem Docker-Zoo erfolgreich Traefik als reverse Proxy betreibe und neulich dafür auch die TLS-Terminierung aktiviert habe, habe ich aus aktuellem Anlass endlich auch einmal die Variante mit NGinx ais reverse Proxy ausprobieren wollen.

Ich habe zu diesem Thema einige Links gefunden, die ich am Ende des Artikels angehängt habe. Ich bin zur Umsetzung aber im großen und ganzen einem einzigen von ihnen gefolgt, weil die Beschreibung darin aus meiner Sicht hervorragend war und die Art und Weise der Umsetzung mir sehr entgegenkam.

In meinem linux/dockerplankakeycloakopenldap.txt=Docker-Zoo setze ich Traefik ein - dort ist es so, dass zur Erweiterung um einen neuen Dienst Traefik nicht angepasst werden muss - es ist lediglich nötig, einige Labels in dem betreffenden docker-compose file zu setzen. Alles weitere funktioniert automatisch.

Ich hätte gerne eine entsprechende Lösung auch mit Nginx angestrebt - dafür wäre es aber notwendig, ähnlich Traefik einen Container zu bauen, der die Docker-API benutzt, um über Events und Eigenschaften der Container informiert zu werden. Solche Nginx-Lösungen existieren auf dem Docker-Hub - allerdings ging es mir hierbei um das Verständnis von Nginx - ich wollte Traefik keine Konkurrenz machen, oder es gar ersetzen.

Die Variante, für die ich mich entschieden habefunktioniert so, dass alle Konfiguration in Nginx vorzunehmen sind - die Container selbst müssen lediglich in das korrekte Netzwerk zugeordnet werden, so dass Nginx sie "sehen" kann. Für jeden Container wird eine Konfigurationsdatei im Nginx-Cointainer angelegt. Zur TLS-Terminierung benutze ich ein Wildcard-Zertifikat für die jeweilige Domain - erstellt natürlich mittels einer entsprechenden Lösung zur Verwaltung von PKIs.

Das docker-compose File für den reverse Proxy ist sehr einfach:

version: '3'

services: reverse: container_name: reverse hostname: reverse image: nginx ports: - 80:80 - 443:443 volumes: - ./config:/etc/nginx - ./certs:/etc/ssl/private networks: - reverse_nginx

networks: reverse_nginx: external: name: reverse_nginx

Die übergreifenden Konfigurationen sind wie im Artikel beschrieben ungeändert übernommen - lediglich an ssl.conf musste ich einige Änderungen vornehmen - eine, weil der Artikel bereits ein wenig in die Jahre gekommen ist:

ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;

musste ich durch

ssl_protocols               TLSv1.2 TLSv1.3;

ersetzen, weil Firefox mit den alten TLS-Versionen nicht mehr zusamenarbeiten mochte.

Weil ich zu faul war, die Zertifikate umzuformatieren, konnte ich SSL-Stapling nicht benutzen und habe daher die beiden Optionen ssl_stapling und ssl_stapling_verify deaktiviert.

Mit der folgenden Beispielkonfiguration für Keycloak konnte ich dann die Beispielanwendung für OpenID-Authentifizierung erfolgreich testen:

upstream keycloakserver {
  server        keycloakserver:8080;
}

server { listen 443 ssl; server_name keycloakserver;

include common.conf; include ssl.conf;

location / { proxy_pass http://keycloakserver; include common_location.conf; } }

Artikel, die hierher verlinken

Was bedeutet das Vorhängeschloss im Browser?

12.11.2021

Ich habe immer wieder Anlauf genommen, mir das Folgende mal von der Seele zu schreiben und es immer wieder aufgeschoben - jetzt ist es aber soweit!

LuFi im Docker-Zoo

22.08.2021

Nachdem ich mich in den letzten Artikeln hauptsächlich um die Infrastruktur meines Docker-Zoos gekümmert habe ist nun eine weitere Anwendung hinzugekommen...

PiHole-Bug bei Installation

25.07.2021

Ich trage mich aktuell mit dem Gedanken, analog zu meinen Skripts zur Einrichtung von Kartenservern oder Netzwerkinfrastruktur einen kleinen Server komplett unattended einrichten zu können, der PiHole, DNSSEC und einen autonomen root-Resolver integriert.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Virtuelles Netzwerklabor

    11.01.2017

    Nachdem ich hin und wieder vor der Herausforderung stehe, Anwendungen unter realen Netzwerkbedingungen zu testen, habe ich bereits vor längerer Zeit begonnen, ein virtuelles Netzwerklabor aufzubauen...

    Weiterlesen...

Neueste Artikel

  • Stratum-1-NTP-Server Links

    Ich habe meinen eigenen Stratum-1-NTP-Server mittels eines GPS-Empfängers, einer Adapterschaltung und einem Raspi gebaut. Hier fasse ich einige nützliche Links zu diesem Themengebiet zusammen

    Weiterlesen...
  • EBCMS threaded und mit mehr Markdown-Unterstützung

    Mein eigener Static Site Generator hat in den letzten Wochen einige größere Umbauten erfahren

    Weiterlesen...
  • Fork der BeanShell wegen Trojan Source

    Es gibt inzwischen einen von mir erstellten Fork des originalen Repository, in dem ich die Komponente zur Darstellung der Konsole gegen die ausgetauscht habe, die in der sQLshell in den Plugins MDIJavaEditor und MDISqlEditor zum Einsatz kommt - dadurch wird wenigstens durch das Syntax-Highlighting auf problematische Stellen im Code hingewiesen.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier.