Ändern Sie die vom Nginx-Reverse-Proxy zurückgegebenen HTML-Seiten

16

Ich habe ein Reverse-Proxy-Setup für den Zugriff auf eine Drittanbieteranwendung, die sich über das Internet in einem Intranet befindet. Angenommen, diese Anwendung befindet sich auf der URL:

https://internalserver:8080/ (nur aus dem Intranet erreichbar)

und der Proxy ist an:

https://proxyserver/ (von jedem Ort der Welt erreichbar)

Der Proxy wird von Nginx verwaltet und funktioniert einwandfrei. Wenn der Benutzer zugreift https://proxyserver/ , erhält er den Inhalt der App unter https://internalserver:8080/.

Das Problem ist , dass die Anwendung absolute URLs in der HTML - Antwort schreibt so, wenn der Benutzer auf einen Link zu einer neuen Seite klickt wird der Browser die Seite mit dem internen Namen zu lokalisieren versucht, zB https://internalserver:8080/somepage statt https://proxyserver/somepage.

Ich weiß, dass dies ein Programmfehler ist, aber ich kann das Programm nicht ändern.

Kann ich die Antwort abfangen, die URLs ändern und sie mit nginx an den Endkunden senden (geändert)? Oder vielleicht mit einem anderen Werkzeug?

EDIT: Ich habe diese Frage schon einmal gesehen, aber mein Fall ist genauer, die angeführte Frage verlangt eine generische Modifikation. In diesem Fall ist das Ad-hoc-Programm fast-cgi die beste Lösung. Ich möchte eine spezifischere Lösung für ein (meiner Meinung nach) häufigeres Szenario. Während ein Fast-CGI-Programm funktionieren kann, suche ich nach einer einfachsten und vielleicht stärkeren und in der realen Welt bewährten Lösung für dieses Szenario.

PCJ
quelle
1
mögliches Duplikat von Modify-Daten, die von Nginx on the fly übertragen werden
Cristian Ciupitu

Antworten:

3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

Das Modul ngx_http_sub_module ist ein Filter, der eine Antwort ändert, indem eine angegebene Zeichenfolge durch eine andere ersetzt wird.

Dieses Modul ist nicht standardmäßig erstellt. Es sollte mit dem Konfigurationsparameter --with-http_sub_module aktiviert werden.

Beispielkonfiguration

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Voro
quelle