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>

HTML 和 JS 檔案中出現的 JavaScript 片段是:

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 檔案在下面的第 2 行和第 5 行顯示了 404 錯誤:

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,因此請嘗試將盡可能多的替換內容塞入一個指令中。例如,我使用正規表示式來涵蓋幾種情況:

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

如果您有一個大檔案和很多單獨的Substitute指令,那麼效能損失會很大!

馬特。

答案2

一下,一去。我發現了我的一個問題的修復方法,重複替換......簡而言之,這很糟糕:

ProxyHTMLEnable On
SetOutputFilter INFLATE;proxy-html;DEFLATE

這兩個指令都將 proxy-html 過濾器提供者插入到輸出過濾器鏈中。顯然,ProxyHTMLEnable 有一次沒有插入 proxy-html,因此需要第二行。

一旦我將第二行更正為:

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

為了完整起見,等效項是:

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

馬特。

相關內容