Модуль Apache mod_proxy_html
| Описание: | Переписывает ссылки HTML для корректного доступа из сетей клиентов в контексте прокси. |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | proxy_html_module |
| Файл исходного кода: | mod_proxy_html.c |
| Совместимость: | Версии 2.4 и выше. Доступен как модуль сторонних производителей для более ранних версий 2.x |
Обзор
Этот модуль предоставляет фильтр вывода для переписывания ссылок HTML в ситуации с прокси, чтобы обеспечить работоспособность ссылок для пользователей за пределами прокси. Он выполняет ту же функцию, что и директива Apache ProxyPassReverse, но для HTTP-заголовков, и является неотъемлемой частью обратного прокси.
Например, если компания имеет сервер приложений по адресу appserver.example.com, который виден только из внутренней сети компании, и публичный веб-сервер www.example.com, они могут захотеть предоставить шлюз к серверу приложений по адресу http://www.example.com/appserver/. Когда сервер приложений ссылается на себя, эти ссылки необходимо переписать для работы через шлюз. mod_proxy_html служит для переписывания <a href="http://appserver.example.com/foo/bar.html">foobar</a> на <a href="http://www.example.com/appserver/foo/bar.html">foobar</a>, делая его доступным извне.
mod_proxy_html был первоначально разработан в WebÞing, и его подробная документация может быть полезна пользователям.
Директива ProxyHTMLBufSize
| Описание: | Устанавливает размер блока для буферизации встроенных скриптов и стилей. |
|---|---|
| Синтаксис: | ProxyHTMLBufSize bytes |
| Значение по умолчанию: | ProxyHTMLBufSize 8192 |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Для анализа не-HTML-контента (таких как стили и скрипты), встроенных в HTML-документы, mod_proxy_html должен прочитать весь скрипт или стили в буфер. Этот буфер будет расширяться по мере необходимости, чтобы вместить наибольший скрипт или стили на странице, с приращением байтов, установленным данной директивой.
Значение по умолчанию 8192 хорошо подходит для почти всех страниц. Однако, если вы знаете, что вы проксируете страницы, содержащие стили и/или скрипты больше 8 КБ (то есть, для одного скрипта или стиля, а не в общей сложности), будет эффективнее установить больший размер буфера, чтобы избежать необходимости динамического изменения размера буфера во время запроса.
Директива ProxyHTMLCharsetOut
| Описание: | Указывает кодировку символов для вывода mod_proxy_html. |
|---|---|
| Синтаксис: | ProxyHTMLCharsetOut Charset | * |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Эта директива выбирает кодировку для вывода mod_proxy_html. Обычно она не используется, так как любое изменение от значения по умолчанию UTF-8 (Unicode, используемое в libxml2) принесёт дополнительную нагрузку на обработку. Специальный маркер ProxyHTMLCharsetOut * сгенерирует вывод, используя ту же кодировку, что и входной.
Обратите внимание, что это зависит от загрузки mod_xml2enc.
Директива ProxyHTMLDocType
| Описание: | Устанавливает объявление типа документа HTML или XHTML. |
|---|---|
| Синтаксис: | ProxyHTMLDocType HTML|XHTML [Legacy] OR ProxyHTMLDocType fpi [SGML|XML] |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
В первом варианте документы будут объявлены как HTML 4.01 или XHTML 1.0 в зависимости от выбранного варианта. Этот вариант также определяет, используется ли синтаксис HTML или XHTML для вывода. Обратите внимание, что формат документов, поступающих от сервера-бекенда, не имеет значения: парсер автоматически с этим справится. Если второй необязательный аргумент установлен на Legacy, документы будут объявлены "Переходными" - опция, которая может потребоваться, если вы проксируете контент до 1998 года или работаете с неисправными инструментами авторизации/публикации.
Во втором варианте будет вставлено собственное объявление FPI. Необязательный второй аргумент определяет, будет ли использоваться синтаксис SGML/HTML или XML/XHTML.
Значение по умолчанию изменено на исключение любого FPI, поскольку отсутствие FPI лучше, чем некорректный. Если ваш бэкенд генерирует корректный HTML или XHTML, установите соответствующее значение.
Если используется первый вариант, mod_proxy_html также очистит HTML до указанного стандарта. Он не может исправить каждую ошибку, но он удалит некорректные элементы и атрибуты. Он также (по желанию) может регистрировать другие ошибки в LogLevel отладки.
Директива ProxyHTMLEnable
| Описание: | Включает или отключает фильтр proxy_html. |
|---|---|
| Синтаксис: | ProxyHTMLEnable On|Off |
| Значение по умолчанию: | ProxyHTMLEnable Off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x. |
Простая переключатель для включения или отключения фильтра proxy_html. Если mod_xml2enc загружен, он также автоматически настроит поддержку интернационализации.
Обратите внимание, что фильтр proxy_html будет действовать только на данные HTML (Content-Type text/html или application/xhtml+xml) и когда данные проксируются. Вы можете переопределить это (на свой страх и риск) установив переменную среды PROXY_HTML_FORCE.
Директива ProxyHTMLEvents
| Описание: | Указывает атрибуты, которые нужно рассматривать как события скриптов. |
|---|---|
| Синтаксис: | ProxyHTMLEvents attribute [attribute ...] |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Указывает один или несколько атрибутов, которые нужно рассматривать как события скриптов, и применяет ProxyHTMLURLMap там, где это разрешено. Вы можете указать любое количество атрибутов в одной или нескольких директивах ProxyHTMLEvents.
Обычно это устанавливается глобально. Если вы устанавливаете ProxyHTMLEvents в нескольких областях, так что одна переопределяет другую, вам нужно указать полный набор в каждой из этих областей.
Шаблон конфигурации по умолчанию в файле proxy-html.conf определяет события в стандартных HTML 4 и XHTML 1.
Директива ProxyHTMLExtended
| Описание: | Определяет, нужно ли исправлять ссылки в встроенных скриптах, стилях и событиях скриптов. |
|---|---|
| Синтаксис: | ProxyHTMLExtended On|Off |
| Значение по умолчанию: | ProxyHTMLExtended Off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Установленное значение Off, ссылки HTML переписываются в соответствии с директивами ProxyHTMLURLMap, но ссылки, появляющиеся в JavaScript и CSS, игнорируются.
Установленное значение On, все события скриптов (определённые ProxyHTMLEvents) и встроенные скрипты или стили также обрабатываются правилами ProxyHTMLURLMap, в соответствии с флагами, установленным для каждого правила. Поскольку это требует большего анализа, производительность будет лучше, если вы включите это только при необходимости.
Вам также нужно быть внимательным к соответствию шаблонам, так как анализатор не знает, что является URL-адресом в встроенном скрипте или стиле. В частности, расширенное соответствие /, вероятно, приведёт к ложным соответствиям.
Директива ProxyHTMLFixups
| Описание: | Исправление простых ошибок HTML. |
|---|---|
| Синтаксис: | ProxyHTMLFixups [lowercase] [dospath] [reset] |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Эта директива принимает от одного до трёх аргументов следующим образом:
-
lowercaseАдреса URL переписываются в нижнем регистре -
dospathОбратные слэши в URL-адресах переписываются в прямые слэши. -
resetСброс любых опций, установленных на более высоком уровне в конфигурации.
Будьте осторожны при использовании этих директив. Исправления исправят определённые ошибки авторизации, но также могут ошибочно исправить ссылки, которые изначально были корректными. Используйте их только в том случае, если вы знаете, что у вас неисправный сервер бэкенда.
Директива ProxyHTMLInterp
| Описание: | Включает интерполяцию правил ProxyHTMLURLMap на уровне каждого запроса. |
|---|---|
| Синтаксис: | ProxyHTMLInterp On|Off |
| Значение по умолчанию: | ProxyHTMLInterp Off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версии 2.4 и выше; доступен как модуль сторонних разработчиков для более ранних версий 2.x |
Это включает интерполяцию в ProxyHTMLURLMap шаблонах поиска и замены.
Если интерполяция отключена, все правила предварительно скомпилированы при запуске. При интерполяции правила нужно перекомпилировать для каждого запроса, что предполагает дополнительную нагрузку на обработку. Поэтому она должна быть включена только при необходимости.
Директива ProxyHTMLLinks
| Описание: | Укажите HTML-элементы, у которых атрибуты URL необходимо переписать. |
|---|---|
| Синтаксис: | ProxyHTMLLinks element attribute [attribute2 ...] |
| Контекст: | настройка сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версия 2.4 и выше; доступен как сторонний модуль для более ранних версий 2.x |
Указывает элементы, у которых атрибуты URL необходимо переписать с использованием стандартных ProxyHTMLURLMap. Вам понадобится одна директива ProxyHTMLLinks на элемент, но она может иметь любое количество атрибутов.
Обычно это настройка глобального уровня. Если вы задаёте ProxyHTMLLinks в нескольких областях, так что одна переопределяет другую, вам необходимо указать полный набор в каждой из этих областей.
В файле proxy-html.conf предусмотрена конфигурация по умолчанию, определяющая HTML-ссылки для стандартных HTML 4 и XHTML 1.
Примеры из proxy-html.conf
ProxyHTMLLinks a href ProxyHTMLLinks area href ProxyHTMLLinks link href ProxyHTMLLinks img src longdesc usemap ProxyHTMLLinks object classid codebase data usemap ProxyHTMLLinks q cite ProxyHTMLLinks blockquote cite ProxyHTMLLinks ins cite ProxyHTMLLinks del cite ProxyHTMLLinks form action ProxyHTMLLinks input src usemap ProxyHTMLLinks head profile ProxyHTMLLinks base href ProxyHTMLLinks script src for
Директива ProxyHTMLMeta
| Описание: | Включает или отключает дополнительный предварительный анализ метаданных в разделах HTML <head>. |
|---|---|
| Синтаксис: | ProxyHTMLMeta On|Off |
| Значение по умолчанию: | ProxyHTMLMeta Off |
| Контекст: | настройка сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версия 2.4 и выше; доступен как сторонний модуль для более ранних версий 2.x. |
Это включает или отключает предварительный анализ метаданных в разделах HTML <head>.
Если это не требуется, отключение ProxyHTMLMeta даст небольшой прирост производительности, пропуская этот этап анализа. Однако иногда это необходимо для правильной работы интернационализации.
Включение ProxyHTMLMeta имеет два эффекта. Во-первых, и что важнее всего, оно позволяет обнаруживать кодировки символов, объявленные в формате
<meta http-equiv="Content-Type" content="text/html;charset=foo">
или, в случае XHTML-документа, объявление XML. Это НЕ требуется, если кодировка символов объявлена в реальном HTTP-заголовке (что всегда предпочтительнее) от сервера-источника, или если документ в формате utf-8 (unicode) или его подмножестве, таком как ASCII. Возможно, вы также сможете обойтись без него, если документы используют значение по умолчанию, объявленное с помощью xml2EncDefault, но это рискует распространением неверного объявления. Директива ProxyHTMLCharsetOut может снизить этот риск, но, вероятно, потребует больше вычислительных ресурсов, чем включение ProxyHTMLMeta.
Другой эффект включения ProxyHTMLMeta — это анализ всех <meta http-equiv=...> объявлений и преобразование их в реальные HTTP-заголовки, в соответствии с первоначальным назначением этого типа HTML-элемента <meta>.
Предупреждение
Поскольку ProxyHTMLMeta преобразует всеhttp-equiv элементы в HTTP-заголовки, важно включать его только в тех случаях, где вы доверяете содержимому HTML так же, как доверяете серверу-источнику. Если HTML контролируется злоумышленниками, они смогут ввести произвольные, потенциально вредоносные HTTP-заголовки в ответы вашего сервера. Директива ProxyHTMLStripComments
| Описание: | Определяет, нужно ли удалять HTML-комментарии. |
|---|---|
| Синтаксис: | ProxyHTMLStripComments On|Off |
| Значение по умолчанию: | ProxyHTMLStripComments Off |
| Контекст: | настройка сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версия 2.4 и выше; доступен как сторонний модуль для более ранних версий 2.x |
Эта директива заставит mod_proxy_html удалять HTML-комментарии. Обратите внимание, что это также удалит любые скрипты или стили, встроенные в комментарии (ошибка, введённая в 1995/6 с Netscape 2 для поддержки более старых браузеров, но до сих пор используемая). Это также может конфликтовать с обработчиками, использующими комментарии, такими как SSI или ESI: убедитесь, что такие обработчики запускаются перед mod_proxy_html в цепочке фильтров, если вы хотите удалить комментарии!
Директива ProxyHTMLURLMap
| Описание: | Определяет правило для переписывания HTML-ссылок |
|---|---|
| Синтаксис: | ProxyHTMLURLMap from-pattern to-pattern [flags] [cond] |
| Контекст: | настройка сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_proxy_html |
| Совместимость: | Версия 2.4 и выше; доступен как сторонний модуль для более ранних версий 2.x. |
Это ключевая директива для переписывания HTML-ссылок. При анализе документа, когда целевой адрес ссылки соответствует from-pattern, совпадающая часть будет переписана на to-pattern, с учётом любых флагов и директивы ProxyHTMLExtended. Будут рассматриваться только те элементы, которые указаны с помощью директивы ProxyHTMLLinks.
Дополнительный третий аргумент может определить следующие флаги. Флаги чувствительны к регистру.
- h
Игнорировать HTML-ссылки (пропускать без изменений)
- e
Игнорировать события сценариев (пропускать без изменений)
- c
Пропускать встроенные разделы скриптов и стилей без изменений.
- L
Последнее совпадение. Если это правило соответствует, больше правил не применяются (обратите внимание, что это происходит автоматически для HTML-ссылок).
- l
Обратное L. Переопределяет поведение по умолчанию с одной заменой для HTML-ссылок.
- R
-
Использовать регулярное выражение для поиска и замены.
from-pattern— это регулярное выражение, аto-pattern— строка замены, которая может быть основана на регулярном выражении. Поддерживается запоминание соответствий регулярного выражения: вы можете использовать скобки () вfrom-patternи извлекать соответствия с $1 по $9 вto-pattern.Если R не установлен, будет использоваться поиск и замена по строкам. Логика — начинается с для HTML-ссылок, но содержит для событий сценариев и встроенных разделов скриптов и стилей.
- x
Использовать расширенные регулярные выражения POSIX. Применимо только с R.
- i
Сопоставление без учёта регистра. Применимо только с R.
- n
Отключить запоминание соответствий регулярного выражения (для повышения скорости). Применимо только с R.
- s
Сопоставление регулярных выражений на основе строк. Применимо только с R.
- ^
Сопоставлять только в начале. Применимо только к поиску по строкам (не регулярным выражениям) и не имеет отношения к HTML-ссылкам.
- $
Сопоставлять только в конце. Применимо только к поиску по строкам (не регулярным выражениям) и не имеет отношения к HTML-ссылкам.
- V
-
Интерполяция переменных окружения в
to-pattern. Строка формата${varname|default}будет заменена значением переменной окруженияvarname. Если она не задана, она заменяется наdefault.|defaultнеобязательно.ПРИМЕЧАНИЕ: интерполяция будет включена только если
ProxyHTMLInterpравно On. - v
-
Интерполяция переменных окружения в
from-pattern. Поддерживаемые шаблоны такие же, как выше.ПРИМЕЧАНИЕ: интерполяция будет включена только если
ProxyHTMLInterpравно On.
Дополнительный четвёртый аргумент cond определяет условие, которое будет вычисляться для каждого запроса, если ProxyHTMLInterp равно On. Если условие вычисляется как FALSE, отображение не будет применено в этом запросе. Если TRUE, или если условие не определено, отображение применяется.
cond вычисляется с помощью парсера выражений. Кроме того, поддерживается более простой синтаксис условий в mod_proxy_html 3.x для HTTPD 2.0 и 2.2.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_proxy_html.html