ProxyHTMLURLMap não modifica arquivo JavaScript

ProxyHTMLURLMap não modifica arquivo JavaScript

Estou usando o Apache 2.4.27 como proxy reverso e estou tendo problemas com algumas de minhas diretivas ProxyHTMLURLMap.

eu tenho umServidor proxye um servidor backend, chamadoservidor1.

Eu tenho um fragmento de JavaScript que aparece em um HTML e também em um arquivo JS separado. O ProxyHTMLURLMap modifica incorretamente o arquivo HTML e não modifica o arquivo JS.

Como defino este URLMap para afetar os dois locais?

Aqui está meu fragmento de configuração:

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>

O fragmento JavaScript que aparece nos arquivos HTML e JS é:

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

O arquivo HTML é modificado pelo ProxyServerduas vezesatualizando a linha correspondente para:

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

Observe a duplicata "server1". Por que está sendo duplicado?

Este arquivo HTML inclui o arquivo JS da seguinte forma:

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

No entanto, o index.js não é modificado pelo servidor proxy. Permanece intocado como:

url: "/rpc/getdefaultcfg.asp",

Por que o arquivo JS não foi afetado pela diretiva URLMap? Qualquer ideia será muito apreciada!

Para sua informação, o arquivo httpd_access_log mostra os erros 404 nas linhas 2 e 5 abaixo:

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, a saída do rastreamento 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

Matt.

Responder1

Achei que a ProxyHTMLURLMapdiretiva não tinha a flexibilidade que eu precisava com as substituições. Em vez disso, usei a Substitutediretiva.

Para garantir que as substituições ocorreram em cada um dos tipos de arquivo de meu interesse, usei primeiro a seguinte diretiva:

     AddOutputFilterByType SUBSTITUTE text/javascript text/html text/css

Então usei muitas Substitutediretivas. Um exemplo de um deles é:

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

Uma coisa a notar é que o arquivo inteiro é verificado para cada Substitutediretiva, então tente agrupar o máximo de substituições possível em uma. Por exemplo, usei regex para cobrir vários casos:

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

Se você tiver um arquivo grande e muitas Substitutediretivas individuais, a penalidade de desempenho será significativa!

Matt.

Responder2

Um já foi, falta um. Descobri a solução para uma das minhas dúvidas, substituições duplicadas... Resumindo, isso é ruim:

ProxyHTMLEnable On
SetOutputFilter INFLATE;proxy-html;DEFLATE

Ambas as diretivas inserem o provedor de filtro proxy-html na cadeia do Filtro de Saída. Aparentemente, ao mesmo tempo, ProxyHTMLEnable não inseriu proxy-html, então a segunda linha foi necessária.

Chega de duplicatas, uma vez que corrigi a segunda linha para ser:

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

Para completar, um equivalente seria:

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

Matt.

informação relacionada