ProxyHTMLURLMap ändert die JavaScript-Datei nicht

ProxyHTMLURLMap ändert die JavaScript-Datei nicht

Ich verwende Apache 2.4.27 als Reverse-Proxy und habe Probleme mit einigen meiner ProxyHTMLURLMap-Direktiven.

Ich habe einProxy Serverund einem Backend-Server, genanntServer 1.

Bei mir erscheint ein JavaScript-Fragment sowohl in einer HTML- als auch in einer separaten JS-Datei. Die ProxyHTMLURLMap ändert die HTML-Datei falsch, ändert aber nicht die JS-Datei.

Wie definiere ich diese URLMap, damit sie beide Stellen beeinflusst?

Hier ist mein Konfigurationsfragment:

LogLevel warn proxy_html:trace3

<Location "/server1/">
    ProxyPass https://server1:5443/ ping=2
    ProxyPassReverse https://server1/

    ProxyHTMLEnable On
    ProxyHTMLExtended On

    SetOutputFilter INFLATE;proxy-html;DEFLATE

    ProxyHTMLURLMap /rpc/ /server1/rpc/
</Location>

Das JavaScript-Fragment, das sowohl in HTML- als auch in JS-Dateien erscheint, ist:

abc.get({
    url: "/rpc/getdefaultcfg.asp",
    onrcv: function(arg) {
        if (arg.STATUS == 0) {
            default_Lang = WEBVAR_JSONVAR_GETDEFAULTLANG.WEBVAR_STRUCTNAME_GETDEFAULTLANG;
        }
        onload = loadInit();
    }
});

Die HTML-Datei wird vom ProxyServer geändertzweimalindem Sie die entsprechende Zeile wie folgt aktualisieren:

url: "/server1/server1/rpc/getdefaultcfg.asp",

Beachten Sie den doppelten „Server1“. Warum wird er dupliziert?

Diese HTML-Datei enthält die JS-Datei wie folgt:

<script language="Javascript" src="index.js"></script>

Die Datei index.js wird jedoch vom Proxyserver nicht geändert. Sie bleibt unverändert:

url: "/rpc/getdefaultcfg.asp",

Warum bleibt die JS-Datei von der URLMap-Direktive unberührt? Für Ideen bin ich sehr dankbar!

Zu Ihrer Information: Die Datei httpd_access_log zeigt die 404-Fehler in den folgenden Zeilen 2 und 5:

1. 192.1.0.76 - "GET /server1/index.html HTTP/1.1" 200 946
2. 192.1.0.76 - "GET /rpc/getdefaultcfg.asp HTTP/1.1" 404 223
3. 192.1.0.76 - "GET /server1/page/disable_javascript.html HTTP/1.1" 200 212
4. 192.1.0.76 - "GET /server1/page/blank.html HTTP/1.1" 200 -
5. 192.1.0.76 - "GET /server1/server1/rpc/getdefaultcfg.asp HTTP/1.1" 404 126

Abschließend die Ausgabe der Proxy_HTML-Verfolgung:

[proxy_html:trace3] mod_proxy_html.c(265): [client 192.1.0.76:51880] C: matched /rpc/, substituting /server1/rpc/
[proxy_html:trace3] mod_proxy_html.c(265): [client 192.1.0.76:51880] C: matched /rpc/, substituting /server1/rpc/
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51880] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/header.html
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51880] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/header.html
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51892] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/login.html
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51892] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/login.html
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51880] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/header.html
[proxy_html:trace1] mod_proxy_html.c(827): [client 192.1.0.76:51880] Non-HTML content; not inserting proxy-html filter, referer: https://proxy-server/server1/page/header.html

Matthäus.

Antwort1

Ich fand, dass der ProxyHTMLURLMapDirektive die nötige Flexibilität bei den Ersetzungen fehlte. Stattdessen habe ich die SubstituteDirektive verwendet.

Um sicherzustellen, dass die Ersetzungen in allen für mich wichtigen Dateitypen erfolgten, habe ich zunächst die folgende Anweisung verwendet:

     AddOutputFilterByType SUBSTITUTE text/javascript text/html text/css

Dann habe ich viele SubstituteAnweisungen verwendet. Ein Beispiel für eine davon ist:

    # Fixup min.js urlPath() references
    Substitute "s#(urlPath\(\))#$1 + \"$npar/\" #q"

Zu beachten ist, dass die gesamte Datei nach jeder SubstituteDirektive durchsucht wird. Versuchen Sie also, so viele Ersetzungen wie möglich in eine zu packen. Ich habe beispielsweise Regex verwendet, um mehrere Fälle abzudecken:

    Substitute "s#(\"|\')/(api|app|images|source|style)#$1/$npar/$2#q"

Wenn Sie eine große Datei und viele einzelne SubstituteAnweisungen haben, ist der Leistungsverlust erheblich!

Matthäus.

Antwort2

Einer erledigt, einer noch zu erledigen. Ich habe die Lösung für eine meiner Fragen entdeckt, doppelte Ersetzungen ... Kurz gesagt, das ist schlecht:

ProxyHTMLEnable On
SetOutputFilter INFLATE;proxy-html;DEFLATE

Beide Anweisungen fügen den Proxy-HTML-Filterprovider in die Ausgabefilterkette ein. Offenbar hat ProxyHTMLEnable zu einem bestimmten Zeitpunkt kein Proxy-HTML eingefügt, sodass die zweite Zeile erforderlich war.

Keine Duplikate mehr, nachdem ich die zweite Zeile wie folgt korrigiert habe:

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

Der Vollständigkeit halber wäre ein Äquivalent:

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

Matthäus.

verwandte Informationen