Я создал обратный прокси-сервер с Apache 2.4 на сервере Cento 7. Он работает со стандартными html-страницами, но мне также нужно заменить некоторые URL-адреса, хранящиеся в файлах .js. Директива:
ProxyHTMLExtended On
должен включить синтаксический анализ внутри внешних файлов .css и .js, но это не работает. В файле журнала я вижу:
[proxy_html:trace1] [pid 3263] mod_proxy_html.c(823): [client xxx] Non-HTML content; not inserting proxy-html filter
Я пытался использовать mod_substitute, это интересная часть моего httpd.conf:
ProxyPass /mylocation/ http://remoteserver/
<Location /mylocation/>
ProxyHTMLEnable On
ProxyHTMLExtended On
LogLevel debug proxy_html:trace3 substitute_module:debug
RequestHeader unset Accept-Encoding
AddOutputFilterByType SUBSTITUTE text/javascript text/html
Substitute "s|/css/|/mylocation/css/|ni"
Substitute "s|/js/|/mylocation/js/|ni"
Substitute "s|/custom_logo/|/mylocation/custom_logo/|ni"
Substitute "s|/html/|/mylocation/html/|ni"
Substitute "s|/current_config/|/mylocation/current_config/|ni"
Substitute "s|/web_lang/|/mylocation/web_lang/|ni"
Substitute "s|/custom_lang/|/mylocation/custom_lang/|ni"
ProxyPassReverse /
ProxyHTMLURLMap //remoteserver /mylocation/
ProxyHTMLURLMap http://remoteserver /mylocation/
ProxyHTMLURLMap /mylocation /mylocation
ProxyHTMLURLMap ^\/(.*) /mylocation/$1 R
</Location>
Но в файле журнала нет следов mod_substitute. Кажется, что mod_substitute никогда не вызывается.
Правила proxyHTMLURLMap прекрасно работают, но только с обычными html-файлами.
В зависимости от файла .js, который я запрашиваю на сервере, я вижу в файле журнала:
[xml2enc:debug] [pid 3259] mod_xml2enc.c(254): [client xxx] AH01434: Charset ISO-8859-1 not supported by libxml2; trying apr_xlate
or
[proxy_html:trace1] [pid 3263] mod_proxy_html.c(823): [client xxx] Non-HTML content; not inserting proxy-html filter
затем процесс останавливается, я получаю файл, но на нем ничего не заменено.
1) Почему правило «ProxyHTMLExtended On» не анализирует внешние файлы .js, как описано в документации Apache?
2) Почему mod_substitute не работает?