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;
}
}
08.06.2024
Ich habe neulich drei Stunden meines Lebens verschwendet weil ich unbedingt die neueste Version der HTTPCore5 Library von Apache einsetzen wollte.
23.05.2023
Das Osterprojekt dieses Jahr sollte sich mit EMail-Servern, Nameservern, DNSSEC und ACME (LetsEncrypt) beschäftigen.
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!
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...
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.
Multi-User-WebDAV, Docker, GitHub
17.11.2019
Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
In eigener Sache...
Weiterlesen...Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.
Weiterlesen...Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.
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, muss 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 Codeberg-Repositories findet man hier.