ProxyHTMLURLMap이 JavaScript 파일을 수정하지 않습니다.

ProxyHTMLURLMap이 JavaScript 파일을 수정하지 않습니다.

저는 Apache 2.4.27을 역방향 프록시로 사용하고 있으며 일부 ProxyHTMLURLMap 지시문에 문제가 있습니다.

나는프록시 서버백엔드 서버서버1.

HTML과 별도의 JS 파일에 JavaScript 조각이 표시됩니다. 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

두 지시문 모두 프록시-html 필터 공급자를 출력 필터 체인에 삽입합니다. 분명히 한때 ProxyHTMLEnable은 Proxy-html을 삽입하지 않았으므로 두 번째 줄이 필요했습니다.

두 번째 줄을 다음과 같이 수정하면 더 이상 중복되지 않습니다.

ProxyHTMLEnable On
SetOutputFilter INFLATE;DEFLATE

완전성을 위해 다음과 같습니다.

ProxyHTMLEnable Off
SetOutputFilter INFLATE;proxy-html;DEFLATE

매트.

관련 정보