Модуль ngx_http_ssi_module
| Пример конфигурации Директивы ssi ssi_last_modified ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length Команды SSI Встроенные переменные  | 
Модуль ngx_http_ssi_module — это фильтр,
обрабатывающий команды SSI (Server Side Includes) в проходящих
через него ответах.
На данный момент список поддерживаемых команд SSI неполон.
Пример конфигурации
location / {
    ssi on;
    ...
}
Директивы
| Синтаксис: | 
            ssi  | 
                
|---|---|
| Умолчание: | 
            ssi off;  | 
                
| Контекст: | 
            http, server, location, if в location | 
                
Разрешает или запрещает обработку команд SSI в ответах.
| Синтаксис: | 
            ssi_last_modified  | 
                
|---|---|
| Умолчание: | 
            ssi_last_modified off;  | 
                
| Контекст: | 
            http, server, location | 
                
Эта директива появилась в версии 1.5.1.
Позволяет сохранить поле заголовка “Last-Modified” исходного ответа во время обработки SSI для лучшего кэширования ответов.
По умолчанию поле заголовка удаляется, так как содержимое ответа изменяется во время обработки и может содержать динамически созданные элементы или части, которые изменились независимо от исходного ответа.
| Синтаксис: | 
            ssi_min_file_chunk  | 
                
|---|---|
| Умолчание: | 
            ssi_min_file_chunk 1k;  | 
                
| Контекст: | 
            http, server, location | 
                
Задаёт минимальный размер частей ответа, хранящихся
на диске, начиная с которого имеет смысл посылать их с помощью
sendfile.
| Синтаксис: | 
            ssi_silent_errors  | 
                
|---|---|
| Умолчание: | 
            ssi_silent_errors off;  | 
                
| Контекст: | 
            http, server, location | 
                
Разрешает не выводить строку
“[an error occurred while processing the directive]”,
если во время обработки SSI произошла ошибка.
| Синтаксис: | 
            ssi_types  | 
                
|---|---|
| Умолчание: | 
            ssi_types text/html;  | 
                
| Контекст: | 
            http, server, location | 
                
Разрешает обработку команд SSI в ответах с указанными MIME-типами
в дополнение к “text/html”.
Специальное значение “*” соответствует любому MIME-типу
(0.8.29).
| Синтаксис: | 
            ssi_value_length  | 
                
|---|---|
| Умолчание: | 
            ssi_value_length 256;  | 
                
| Контекст: | 
            http, server, location | 
                
Задаёт максимальную длину значений параметров в SSI-командах.
Команды SSI
Общий формат команд SSI такой:
<!--# команда параметр1=значение1 параметр2=значение2 ... -->
Поддерживаются следующие команды:
block- 
Описывает блок, который можно использовать
как заглушку в команде 
include. Внутри блока могут быть другие команды SSI. Параметр команды:name- имя блока.
 
<!--# block name="one" --> заглушка <!--# endblock -->
 config- 
Задаёт некоторые параметры, используемые при обработке SSI, а именно:
errmsg- 
строка, выводящаяся при ошибке во время обработки SSI.
По умолчанию выводится такая строка:
[an error occurred while processing the directive]
 timefmt- 
строка формата, передаваемая функции 
strftime()для вывода даты и времени. По умолчанию используется такой формат:
Для вывода времени в секундах подходит формат “"%A, %d-%b-%Y %H:%M:%S %Z"
%s”. 
 echo- 
Выводит значение переменной.
Параметры команды:
var- имя переменной.
 encoding- 
способ кодирования.
Возможны три значения — 
none,urlиentity. По умолчанию используетсяentity. default- 
нестандартный параметр, задающий строку, которая выводится,
если переменная не определена.
По умолчанию выводится строка
“
(none)”. Команда
заменяет такую последовательность команд:<!--# echo var="name" default="нет" -->
<!--# if expr="$name" --><!--# echo var="name" --><!--# else -->нет<!--# endif --> 
 if- 
Выполняет условное включение.
Поддерживаются следующие команды:
На данный момент поддерживается только один уровень вложенности. Параметр команды:<!--# if expr="..." --> ... <!--# elif expr="..." --> ... <!--# else --> ... <!--# endif -->
expr- 
выражение.
В выражении может быть:
- 
проверка существования переменной:
<!--# if expr="$name" -->
 - 
сравнение переменной с текстом:
<!--# if expr="$name =
text" --> <!--# if expr="$name !=text" --> - 
сравнение переменной с регулярным выражением:
<!--# if expr="$name = /
text/" --> <!--# if expr="$name != /text/" --> 
textвстречаются переменные, то производится подстановка их значений. В регулярном выражении можно задать позиционные и именованные выделения, а затем использовать их через переменные, например:<!--# if expr="$name = /(.+)@(?P<domain>.+)/" --> <!--# echo var="1" --> <!--# echo var="domain" --> <!--# endif --> - 
проверка существования переменной:
 
 include- 
Включает в ответ результат другого запроса.
Параметры команды:
file- 
задаёт включаемый файл, например:
<!--# include file="footer.html" -->
 virtual- 
задаёт включаемый запрос, например:
Несколько запросов, указанных на одной странице и обрабатываемых проксируемыми или FastCGI/uwsgi/SCGI/gRPC-серверами, работают параллельно. Если нужна последовательная обработка, следует воспользоваться параметром<!--# include virtual="/remote/body.php?argument=value" -->
wait. stub- 
нестандартный параметр, задающий имя блока,
содержимое которого будет выведено, если тело ответа на включаемый запрос
пустое или если при исполнении запроса произошла ошибка, например:
Содержимое замещающего блока обрабатывается в контексте включаемого запроса.<!--# block name="one" --> <!--# endblock --> <!--# include virtual="/remote/body.php?argument=value" stub="one" -->
 wait- 
нестандартный параметр, указывающий, нужно ли ждать
полного исполнения данного запроса, прежде чем продолжать выполнение
SSI, например:
<!--# include virtual="/remote/body.php?argument=value" wait="yes" -->
 set- 
нестандартный параметр, указывающий, что удачный
результат выполнения запроса нужно записать в заданную переменную,
например:
Максимальный размер ответа задаётся директивой subrequest_output_buffer_size (1.13.10):<!--# include virtual="/remote/body.php?argument=value" set="one" -->
До версии 1.13.10 в переменные можно было записать только результаты ответов, полученные через модули ngx_http_proxy_module, ngx_http_memcached_module, ngx_http_fastcgi_module (1.5.6), ngx_http_uwsgi_module (1.5.6) и ngx_http_scgi_module (1.5.6). Максимальный размер ответа задавался при помощи директив proxy_buffer_size, memcached_buffer_size, fastcgi_buffer_size, uwsgi_buffer_size и scgi_buffer_size.location /remote/ { subrequest_output_buffer_size 64k; ... } 
 set- 
Присваивает значение переменной.
Параметры команды:
var- имя переменной.
 value- значение переменной. Если в присваиваемом значении есть переменные, то производится подстановка их значений.
 
 
Встроенные переменные
Модуль ngx_http_ssi_module поддерживает
две встроенные переменные:
$date_local- 
текущее время в локальной временной зоне.
Формат задаётся командой 
configс параметромtimefmt. $date_gmt- 
текущее время в GMT.
Формат задаётся командой 
configс параметромtimefmt.