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.
quelle
Antworten:
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:
quelle
http://nginx.org/en/docs/http/ngx_http_sub_module.html
quelle