ProxyHTMLURLMap 不修改 JavaScript 文件

ProxyHTMLURLMap 不修改 JavaScript 文件

我正在使用 Apache 2.4.27 作为反向代理,但在使用某些 ProxyHTMLURLMap 指令时遇到了问题。

我有一个代理服务器以及一个名为服务器1

我的 HTML 中出现了一个 JavaScript 片段,还有一个单独的 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

马特。

相关内容