Spec-Zone.ru › Apache HTTP Server

Модуль 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 шаблонах поиска и замены.

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

END_OF_DOCUMENT_MARKER

Директива 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

Spec-Zone.ru

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