Reverse-Proxy und absolute Pfade

Da ich ein Flat-File-CMS benutze, das mit absoluten Links arbeitet, hat mein Reverse Proxy Probleme gemacht, da er für die Verwendung dieser Links nicht richtig konfiguriert war. Deshalb musste ich ihn neu konfigurieren bzw. die nginx.conf neu erstellen, da ich NGINX als Reverse Proxy verwende.

Unten findest du den Link zu GitHub, wo ein Docker-Container erstellt wird, der einen NGINX als Reverse Proxy startet. Die nginx.conf kann auch außerhalb eines Docker-Containers verwendet werden.

Link: GitHub – Reverse Proxy

Absolute Links enthalten die vollständige URL, inklusive Protokoll (z.B. http oder https), Domain und Pfad. Wenn ein Backend-Server absolute Links generiert, die nicht mit der Domain oder dem Protokoll des Reverse Proxys übereinstimmen, kann es zu Problemen kommen. Beispielsweise könnte ein Client einen Link erhalten, der direkt auf den Backend-Server verweist, anstatt auf den Proxy, was Sicherheitsrisiken birgt und den Zweck des Proxys untergräbt.

Zudem können Links falsch aufgelöst werden, wenn der Proxy SSL verwendet, der Backend-Server jedoch nicht. In solchen Fällen würde ein Client versuchen, eine ungesicherte Verbindung aufzubauen, was zu einer "Mixed Content"-Warnung im Browser führen könnte. Die Lösung besteht oft darin, entweder relative Links zu verwenden oder den Reverse Proxy so zu konfigurieren, dass er absolute Links korrekt umschreibt.

Hierfür habe ich den Subfilter von NGINX benutzt, der absolute Pfade während des Aufrufs durch den Reverse Proxy in relative Pfade umwandelt:

# Subfilter, um absolute Pfade in relative umzuwandeln
sub_filter 'http://192.168.0.78:8200/' '/';
sub_filter_once off;

kurze Erklärung zu Subfiltern bei NGINX

Der Subfilter in NGINX ermöglicht es, Text in HTTP-Antworten dynamisch zu ändern, bevor sie an den Client gesendet werden. Das ist besonders nützlich, um absolute Links in relative zu ändern oder HTML- und CSS-Inhalte anzupassen.

Beispiele:

Domain-Änderung:
sub_filter 'http://old-domain.com/' 'https://new-domain.com/';


Script-Tags anpassen:
sub_filter '<script src="http://example.com/' '<script src="/';


Stylesheet-Pfade korrigieren:
sub_filter 'url(http://example.com/images/' 'url(/images/';

Diese Beispiele zeigen, wie flexibel der Subfilter eingesetzt werden kann,
um Probleme mit absoluten Links oder anderen spezifischen Inhalten zu lösen.