it-swarm.com.de

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

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 über das Intranet erreichbar)

und der Proxy ist eingeschaltet:

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

Der Proxy wird von nginx verwaltet und funktioniert einwandfrei. Wenn der Benutzer auf https://proxyserver/ sie erhalten den Inhalt der App bei https://internalserver:8080/.

Das Problem besteht darin, dass die Anwendung absolute URLs in die HTML-Antwort schreibt. Wenn der Benutzer auf einen Link zu einer neuen Seite klickt, versucht der Browser, die Seite mit ihrem internen Namen zu finden, z. https://internalserver:8080/somepage Anstatt von 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 endgültigen Client senden (geändert)? Oder vielleicht mit einem anderen Werkzeug?

EDIT: Ich habe diese Frage schon einmal gesehen, aber mein Fall ist spezifischer, die zitierte Frage verlangt eine generische Modifikation. In diesem Fall ist das Fast-CGI-Ad-hoc-Programm die beste Lösung. Ich möchte eine spezifischere Lösung für (glaube ich) ein 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.

19
PCJ

Hier ist ein offizielles Nginx-Video auf YouTube, das das Umschreiben von Inline-Inhalten demonstriert.

https://youtu.be/7Y7ORypoHhE?t=20m22s

In der Tat mit sub_filter

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

In Ihrem Fall sehen Sie etwas wie:

location / {
sub_filter_once off;
sub_filter_types text/html;
sub_filter "https://internalserver:8080" "https://proxyserver";
}
18
JayMcTee

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, sondern sollte mit dem Konfigurationsparameter --with-http_sub_module aktiviert werden.

Beispielkonfiguration

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