Wie auch der Apache Server gibt es bei Nginx ein Substitutionsmodul. Leider ist das Modul ein wenig schlichter und bietet nicht so viele Optionen. Das Modul wird nicht per Default mit gebaut. Es muss explizit aktiviert werden. Viele Distributionen bauen das Modul aber gleich mit. Dieses Modul sollte aber nicht mit dem „subs_filter“ Modul verwechselt werden, welches auch von vielen Distributionen mit angeboten wird. Das „subs_filter“ Modul ähnelt sehr stark dem Apache Mod Substitute.

Wie auch bei Apache funktioniert es nur wenn der Inhalt nicht komprimiert ist. Dazu setzt man am einfachsten die Option

proxy_set_header Accept-Encoding "";

im „location“ Bereich für den Proxy Eintrag. Dadurch wird der Inhalt bei der Übertragung zwischen Proxy und Quelle nicht komprimiert und kann mit dem sub Modul verändert werden. Der Inhalt vom Proxy zum Client (Browser) kann aber wieder komprimiert werden.

sub_filter_types application/xml;
sub_filter_last_modified on;
sub_filter_once off;
sub_filter 'https://problempodcast.de/wp-content/cache/' 'https://URL/podcast-ssl-problem/cache/';

Die „sub_filter_types“ Option bestimmt welche MIME Typen verändert werden dürfen. Der Standard ist nur „text/html“, mit einem Asterisk (*) kann man auf alle MIME Typen den Filter anwenden. Man sollte immer versuchen den MIME Type so genau wie Möglich setzen, um Fehler bei der Veränderung mit dem Modul auszuschließen.

Die „sub_filter_last_modified“ Option kann hilfreich sein wenn man nicht möchte, dass der „Last Modified“ Eintrag geändert wird. Den eine Veränderung mit dem Modul würde normalerweise einen neuen „Last Modified“ Eintrag erzeugen.

Mit „sub_filter_once“ kann bestimmt werden, ob alle „sub_filter“ im selben Bereich nur auf die erste passende Stelle angewendet werden oder auf jede im Dokument passende Stelle.  Leider kann man dieses nicht für jeden „sub_filter“ eigenständig konfigurieren. Man muss sich also entscheiden und dann ggf. die „sub_filter“ so anpassen das es nur eine mögliche Übereinstimmung gibt.

Nun zur wichtigsten Option, der “ sub_filter“ Funktion. Nach der ersten Zeichenfolge wird im Dokument gesucht und mit der zweiten Zeichenfolge ersetzt. Die Suche ignoriert immer die groß und klein Schreibung. Es macht also keinen Unterschied ob im original Dokument ein kleiner oder großer Buchstabe ist. Das lässt sich nicht abschalten. Die Zeichenfolgen müssen in einfache Anführungszeichen gesetzt werden. In einem „location“ Bereich kann es mehrer “ sub_filter“ Optionen geben. Sie werden der Reihe nach immer auf dem veränderten Dokument durchgeführt.

In “ sub_filter“ sind keine regulären Ausdrücke möglich. Das schränkt die Muster Erkennung erheblich ein. Es kann wirklich nur nach einem normalen String gesucht und dieser dann ersetzt werden. Zusätzlich können aber normale Nginx Variablen eingebaut werden.

Falls mehr Optionen gewünscht sind, besonders im hinblick auf reguläre Ausdrücke, hilft ein Blick auf das „subs_filter“ Modul. Viele Distributionen stellen das Modul als normales Pakte bereit.

Nginx sub Modul bei einem Reverse Proxy