ProxyHTMLURLMap no modifica el archivo JavaScript

ProxyHTMLURLMap no modifica el archivo JavaScript

Estoy usando Apache 2.4.27 como proxy inverso y tengo problemas con algunas de mis directivas ProxyHTMLURLMap.

tengo unservidor proxyy un servidor backend, llamadoservidor 1.

Tengo un fragmento de JavaScript que aparece en un HTML, así como en un archivo JS separado. ProxyHTMLURLMap modifica incorrectamente el archivo HTML y no modifica el archivo JS.

¿Cómo defino este URLMap para que afecte a ambos lugares?

Aquí está mi fragmento de configuración:

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>

El fragmento de JavaScript que aparece tanto en archivos HTML como JS es:

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

El archivo HTML es modificado por el ProxyServerdos vecesactualizando la línea coincidente a:

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

Observe el duplicado "servidor1". ¿Por qué se duplica?

Este archivo HTML incluye el archivo JS de la siguiente manera:

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

Sin embargo, el servidor proxy no modifica index.js. Permanece intacto como:

url: "/rpc/getdefaultcfg.asp",

¿Por qué el archivo JS no es afectado por la directiva URLMap? ¡Cualquier idea muy apreciada!

Para su información, el archivo httpd_access_log muestra los errores 404 en las líneas 2 y 5 a continuación:

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

Finalmente, el resultado del seguimiento de proxy_html:

[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

Mate.

Respuesta1

Encontré que la ProxyHTMLURLMapdirectiva carecía de la flexibilidad que necesitaba con las sustituciones. En lugar de eso utilicé la Substitutedirectiva.

Para garantizar que las sustituciones se produjeran en cada uno de los tipos de archivos que me interesaban, primero utilicé la siguiente directiva:

     AddOutputFilterByType SUBSTITUTE text/javascript text/html text/css

Luego utilicé muchas Substitutedirectivas. Un ejemplo de uno de ellos es:

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

Una cosa a tener en cuenta es que se analiza todo el archivo para cada Substitutedirectiva, así que intente incluir tantas sustituciones como pueda en una. Por ejemplo, utilicé expresiones regulares para cubrir varios casos:

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

Si tiene un archivo grande y muchas Substitutedirectivas individuales, ¡la penalización en el rendimiento es significativa!

Mate.

Respuesta2

Uno menos, uno por irse. Descubrí la solución a una de mis preguntas, sustituciones duplicadas... En resumen, esto es malo:

ProxyHTMLEnable On
SetOutputFilter INFLATE;proxy-html;DEFLATE

Ambas directivas insertan el proveedor de filtro proxy-html en la cadena de filtro de salida. Aparentemente, en un momento, ProxyHTMLEnable no insertó proxy-html, por lo que se necesitaba la segunda línea.

No más duplicados, una vez que corregí la segunda línea para que fuera:

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

Para completar, un equivalente sería:

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

Mate.

información relacionada