Как отладить, почему включение mod_proxy_html приводит к появлению пустой страницы?

Общие сведения

У меня есть четыре сервера Windows, на которых запущен Server 2012 R2, на каждом из которых запущен Apache 2.4. Они разделены на две пары веб-серверов с балансировкой нагрузки, первая пара обращена к Интернету, а вторая пара - к локальной сети. Существует правило входящего брандмауэра, разрешающее трафик порта 80 с первого на второй для запросов API.

Я также запускаю программное обеспечение визуализации Tableau Server в локальной сети, и моя текущая задача - проксировать трафик через два набора веб-серверы в Tableau. Я использую эти правила на внешнем веб-сервере:

/tableau-proxy/* : proxy to the inner web server
/*               : run a web app that carries Tableau content

На внутреннем веб-сервере я использую следующие правила:

/tableau-proxy/* : proxy to Tableau and strip off the /tableau-proxy prefix
/*               : run an API app

Для обоих наборов правил я использую mod_proxy , mod_proxy_http и mod_rewrite . Само проксирование работает; например, запрос изображения может передаваться из Интернета, отскакивать от двух веб-серверов, попадать на Tableau, а затем передаваться обратно пользователю в виде данных PNG.

Проблема перезаписи содержимого

Последние 5% этой проблемы заключаются в перезаписи HTML-ссылок, возвращаемых из Tableau, так что префикс подкаталога прокси восстанавливается. Это на стороне LAN / внутренних веб-серверах. Я использую следующее правило:

/ -> /tableau-proxy

Я пытаюсь использовать для этого mod_proxy_html , но с конфигурацией, которую я использую, я получаю пустую страницу. Интересно, что он обслуживается с кодом ответа 200, поэтому отладить его немного сложнее.

Конфигурация

Конфигурация, которую я использую, такова:

LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule xml2enc_module modules/mod_xml2enc.so
Include conf/extra/proxy-html.conf

<Directory "C:\Apache24\htdocs\public\tableau-proxy">
    LogLevel alert rewrite:trace2 proxy_html:trace2

    # Proxy requests to the Tableau LB
    RewriteEngine on

    # Here is a test Tableau server
    RewriteRule (.*) http://tabtest/$1 [P]

    # Don't make the x-forwarded-for header a list of proxy hops!
    # That will break redirects in Tableau
    ProxyAddHeaders Off

    ProxyHTMLExtended Off
    xml2EncDefault utf-8
    LogLevel debug

    ProxyHTMLEnable On
    ProxyHTMLURLMap / /tableau-proxy
</Directory>

Я также попытался сохранить кодировку документа как он возвращается по пути прокси:

ProxyHTMLCharsetOut *

Это, похоже, не имеет значения, и в результате:

Информация: Получена кодировка utf-8 из заголовков HTTP

Ошибка: недопустимый аргумент: [клиент: IP] AH01427: xml2enc: Кодировка utf-8 не поддерживается

(Что, не t поддерживает UTF-8?)

Я пробовал экспериментировать с разными типами HTML-документов, опять же без изменений:

ProxyHTMLDoctype XHTML Legacy

Я пробовал добавить прокси-модуль HTML в качестве фильтра, на случай, если он сделает что-то большее, чем ProxyHTMLEnable На , снова безрезультатно:

SetOutputFilter proxy-html

Я видел в сети отдельные спорадические сообщения о других людях, испытывающих эту проблему, и некоторые из дополнительных элементов выше представляют собой мои попытки некоторых предлагаемых решений, но пустая страница сохраняется. Что я могу попробовать дальше?

0
задан 12 July 2018 в 15:07
1 ответ

Я нашел решение. Пакет Tableau использует Apache для обслуживания контента, поэтому он может извлечь выгоду из определения того, какие форматы кодирования приемлемы для клиента. Коллега предположил, что, возможно, при перезаписи HTML-ссылок сжатый контент задыхался, и это оказалось правильным.

Поэтому я использовал mod_headers , чтобы отключить сжатие, таким образом:

RequestHeader set Accept-Encoding identity

Я считаю, что это не проблема Tableau; Я думаю, что проблема в прокси-сервере Apache, который задыхается от сжатого содержимого. Я видел в другом месте в Интернете, что некоторые люди добавляют фильтры распаковки-изменения-повторного сжатия в свою конфигурацию прокси, предположительно для решения именно этой проблемы, но это не сработало для меня (по общему признанию, я не настаивал на этой линии запроса в течение длительного времени.

Итак, это обходной путь, хотя и очень приемлемый для нас. Возможно, я попытаюсь вернуться к этому, чтобы сжатие снова заработало.

0
ответ дан 5 December 2019 в 05:39

Теги

Похожие вопросы