ProxyHTMLURLMap не изменяет файл JavaScript

ProxyHTMLURLMap не изменяет файл JavaScript

Я использую Apache 2.4.27 в качестве обратного прокси-сервера, и у меня возникли проблемы с некоторыми директивами ProxyHTMLURLMap.

у меня естьПрокси сервери внутренний сервер, называемыйсервер1.

У меня фрагмент JavaScript появляется в HTML, а также в отдельном файле JS. ProxyHTMLURLMap неправильно изменяет файл HTML и не изменяет файл JS.

Как мне определить этот URLMap, чтобы он влиял на оба места?

Вот фрагмент моей конфигурации:

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>

Фрагмент JavaScript, который появляется как в файлах HTML, так и в файлах JS:

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

Файл HTML изменяется ProxyServerдваждыобновив соответствующую строку на:

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

Обратите внимание на дубликат "server1". Почему он дублируется?

Этот HTML-файл включает в себя JS-файл следующим образом:

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

Однако index.js не модифицируется прокси-сервером. Он остается нетронутым, как:

url: "/rpc/getdefaultcfg.asp",

Почему файл JS не затронут директивой URLMap? Любые идеи приветствуются!

К вашему сведению, файл httpd_access_log показывает ошибки 404 в строках 2 и 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

Наконец, вывод трассировки 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

Мэтт.

решение1

Я обнаружил, что ProxyHTMLURLMapдирективе не хватает гибкости, которая мне нужна при заменах. Вместо этого я использовал Substituteдирективу.

Чтобы гарантировать, что замены будут произведены во всех интересующих меня типах файлов, я сначала использовал следующую директиву:

     AddOutputFilterByType SUBSTITUTE text/javascript text/html text/css

Затем я использовал много Substituteдиректив. Пример одной из них:

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

Стоит отметить, что для каждой Substituteдирективы сканируется весь файл, поэтому постарайтесь втиснуть в одну как можно больше замен. Например, я использовал regex, чтобы охватить несколько случаев:

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

Если у вас большой файл и много отдельных Substituteдиректив, то потеря производительности будет существенной!

Мэтт.

решение2

Один есть, один остался. Я нашел решение для одного из моих вопросов, дублирующие замены... Короче говоря, это плохо:

ProxyHTMLEnable On
SetOutputFilter INFLATE;proxy-html;DEFLATE

Обе директивы вставляют proxy-html filter provider в цепочку Output Filter. Видимо, в какой-то момент ProxyHTMLEnable не вставил proxy-html, поэтому понадобилась вторая строка.

Больше никаких дубликатов, как только я исправил вторую строку на:

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

Для полноты картины эквивалент будет таким:

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

Мэтт.

Связанный контент