Модуль ngx_http_xslt_module

Пример конфигурации
Директивы
     xml_entities
     xml_external_entities
     xslt_last_modified
     xslt_param
     xslt_string_param
     xslt_stylesheet
     xslt_types

Модуль ngx_http_xslt_module (0.7.8+) — это фильтр, преобразующий XML-ответ с помощью одного или нескольких XSLT-шаблонов.

По умолчанию этот модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра --with-http_xslt_module.

Для сборки и работы этого модуля нужны библиотеки libxml2 и libxslt.

Пример конфигурации

location / {
    xml_entities    /site/dtd/entities.dtd;
    xslt_stylesheet /site/xslt/one.xslt param=value;
    xslt_stylesheet /site/xslt/two.xslt;
}

Директивы

Синтаксис: xml_entities путь;
Умолчание:
Контекст: http, server, location

Задаёт файл DTD, в котором описаны символьные сущности. Этот файл компилируется на стадии конфигурации. По техническим причинам модуль не имеет возможности использовать внешнее подмножество, заданное в обрабатываемом XML, поэтому оно игнорируется, а вместо него используется специально заданный файл. В этом файле не нужно описывать структуру XML, достаточно только объявления необходимых символьных сущностей, например:

<!ENTITY nbsp "&#xa0;">

Синтаксис: xml_external_entities on | off;
Умолчание:
xml_external_entities off;
Контекст: http, server, location

Эта директива появилась в версии 1.31.3.

Разрешает или запрещает загрузку внешних сущностей, объявленных во внутреннем подмножестве DTD обрабатываемого XML. Поддерживается только загрузка внешних сущностей из файлов.

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

Синтаксис: xslt_last_modified on | off;
Умолчание:
xslt_last_modified off;
Контекст: http, server, location

Эта директива появилась в версии 1.5.1.

Позволяет сохранить поле заголовка “Last-Modified” исходного ответа во время XSLT-преобразований для лучшего кэширования ответов.

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

Синтаксис: xslt_param параметр значение;
Умолчание:
Контекст: http, server, location

Эта директива появилась в версии 1.1.18.

Задаёт параметры для XSLT-шаблонов. Значение рассматривается как выражение XPath. В значении можно использовать переменные. Если нужно передать в шаблон строковое значение, можно воспользоваться директивой xslt_string_param.

Директив xslt_param может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы xslt_param и xslt_string_param.

Синтаксис: xslt_string_param параметр значение;
Умолчание:
Контекст: http, server, location

Эта директива появилась в версии 1.1.18.

Задаёт строковые параметры для XSLT-шаблонов. Выражения XPath в значении параметра не интерпретируются. В значении можно использовать переменные.

Директив xslt_string_param может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы xslt_param и xslt_string_param.

Синтаксис: xslt_stylesheet шаблон [параметр=значение ...];
Умолчание:
Контекст: location

Задаёт XSLT-шаблон и необязательные параметры для этого шаблона. Шаблон компилируется на стадии конфигурации.

Параметры можно задавать как по отдельности, так и группировать в одной строке, разделяя символом “:”. Если же в самих параметрах встречается символ “:”, то его нужно экранировать в виде “%3A”. Кроме того, libxslt требует, чтобы параметры, содержащие не только алфавитно-цифровые символы, были заключены в одинарные или двойные кавычки, например:

param1='http%3A//www.example.com':param2=value2

В описании параметров можно использовать переменные, например, целая строка параметров может быть взята из одной переменной:

location / {
    xslt_stylesheet /site/xslt/one.xslt
                    $arg_xslt_params
                    param1='$value1':param2=value2
                    param3=value3;
}

Можно указать несколько шаблонов — в этом случае они будут применяться последовательно в порядке их описания.

Синтаксис: xslt_types mime-тип ...;
Умолчание:
xslt_types text/xml;
Контекст: http, server, location

Разрешает преобразования в ответах с указанными MIME-типами в дополнение к “text/xml”. Специальное значение “*” соответствует любому MIME-типу (0.8.29). Если в результате преобразования выдаётся HTML-ответ, то его MIME-тип меняется на “text/html”.