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

  • Alarmierung über Skripte

    16.09.2019

    Nachdem ich mich in letzter Zeit wieder verstärkt mit den Themen Monitoring und Alarmierung auseinandersetze, habe ich überlegt, ob ich die dabei gewonnenen Erkenntnisse nicht auch dazu nutzen könnte, die bestehende Lösung flexibler zu machen

    Weiterlesen...

Neueste Artikel

  • Meine Umsetzung des Konzepts CircuitBreaker

    Das Konzept eines CircuitBreaker ist schon lange bekannt. Ich habe mir zu Studienzwecken einen selber gebaut - eigentlich zwei: Einer ist dafür da, das Logging von gleichartigen Exceptions zu drosseln, der andere für das Entzerren von Versuchen, Ressourcen von URLs nachzuladen. Diese spezielle Variante benötigte ich für EBMap4D: Falls einer der Tile-Server ausfällt, wird ansonsten ständig versucht, die Kacheln neu herunterzuladen. Das frisst nicht nur Rechenzeit, sondern ist auch unnütz.

    Weiterlesen...
  • Mein erster Origami-Kranich

    Nachdem ich mich nun schon so lange mit Origami beschäftige habe ich endlich einmal das älteste dokumentierte Ornament versucht - aus gutem Grund...

    Weiterlesen...
  • Will it go round in circles - Nashville Jam

    Eine neue Musikreihe/Show auf Youtube gefunden...

    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.