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 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

Apache HTTPCore5 funktioniert nicht mit Docker

08.06.2024

Ich habe neulich drei Stunden meines Lebens verschwendet weil ich unbedingt die neueste Version der HTTPCore5 Library von Apache einsetzen wollte.

Osterprojekt 2023: DNSSEC

23.05.2023

Das Osterprojekt dieses Jahr sollte sich mit EMail-Servern, Nameservern, DNSSEC und ACME (LetsEncrypt) beschäftigen.

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

  • Fährnisse des Buildprozesses unter Windows

    17.07.2019

    Nachdem ich begonnen hatte, mich mit der Beschleunigung der Berechnung des Mandelbrot-Fraktals unter Zuhilfenahme der Shadereinheiten in Graphikkarten zu beschäftigen und erste Erfolge feiern konnte, wollte ich das mal auf einer richtigen Graphikkarte ausprobieren...

    Weiterlesen...

Neueste Artikel

  • Datenvalidierung UTF8 mit BiDi-Steuerzeichen (TrojanSource 2.0)

    Ich bin heute nochmal inspiriert worden, weiter über die Trojan Source Vulnerability nachzudenken. Meiner Meinung nach bestehen hier noch Probleme - speziell bei Nutzereingaben oder Daten, die über externe Schnittstellen ampfangen werden.

    Weiterlesen...
  • OpenStreetMap Navi als Docker-Container

    Ich habe die auf OpenStreetMap basierende OpenSource Navigationslösung Graphhopper in einen Docker-Container gepackt und als neuestes Mitglied in meinem Docker-Zoo willkommen geheißen.

    Weiterlesen...
  • SQL-Aggregatfunktionen in SQLite als BeanShell-Scripts

    Ich habe neulich über eine Möglichkeit berichtet, SQLite mittels der sQLshell und Beanshell-Skripten um SQL-Funktionen zu erweitern. In diesem Artikel versprach ich auch, über eine solche Möglichkeit für Aggregatfunktionen zu berichten.

    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 - meine öffentlichen GitLab-Repositories finden sich dagegen hier.