Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_proxy_html

Описание: Переписывает HTML-ссылки, чтобы они были доступны из клиентских сетей в контексте прокси.
Статус: Базовый
Идентификатор модуля: proxy_html_module
Исходный файл: mod_proxy_html.c
Совместимость: Версия 2.4 и новее. Для более ранних версий 2.x доступен как сторонний модуль

Краткое описание

Этот модуль предоставляет выходной фильтр для переписывания HTML-ссылок в прокси-среде, чтобы ссылки работали для пользователей за пределами прокси. Он выполняет ту же задачу, что и директива ProxyPassReverse в Apache для 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 КБ (то есть размером более 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, документы будут объявлены как «Transitional». Этот вариант может потребоваться при проксировании содержимого, созданного до 1998 года, или при работе с неисправными инструментами создания и публикации.

Во втором варианте будет вставлен указанный вами FPI. Второй необязательный аргумент определяет, будет ли использоваться синтаксис SGML/HTML или XML/XHTML.

Значение по умолчанию изменено на отсутствие FPI: лучше не указывать FPI вовсе, чем использовать некорректный. Если внутренний сервер создаёт корректный HTML или XHTML, задайте соответствующее значение.

При использовании первого варианта mod_proxy_html также исправит HTML в соответствии с указанным стандартом. Он не может исправить все ошибки, но удалит некорректные элементы и атрибуты. При необходимости он также будет регистрировать другие ошибки на уровне LogLevel Debug.

Директива 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 доступен как сторонний модуль

Задаёт один или несколько атрибутов, которые следует считать событиями скриптов, и применяет к ним ProxyHTMLURLMaps, если это включено. В одной или нескольких директивах 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 доступен как сторонний модуль

Эта директива включает интерполяцию шаблонов from- и to- в ProxyHTMLURLMap для каждого запроса.

Если интерполяция отключена, все правила предварительно компилируются при запуске. При включённой интерполяции их необходимо компилировать заново для каждого запроса, что увеличивает нагрузку на обработку. Поэтому включайте её только при необходимости.

Директива ProxyHTMLLinks

Описание: Задаёт HTML-элементы с атрибутами URL, которые необходимо переписывать.
Синтаксис:
ProxyHTMLLinks element attribute [attribute2 ...]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Базовый
Модуль: mod_proxy_html
Совместимость: Версия 2.4 и новее; для более ранних версий 2.x доступен как сторонний модуль

Задаёт элементы с атрибутами URL, которые следует переписывать с использованием стандартных ProxyHTMLURLMaps. Для каждого элемента нужна отдельная директива 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/96 годах в 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. В качестве HTML-ссылок рассматриваются только элементы, указанные с помощью директивы 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. Если условие ложно, карта не будет применена к этому запросу. Если условие истинно или не задано, карта применяется.

Условие 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API