저는 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
매트.