SSI#

O módulo é um filtro que processa comandos SSI (Server Side Includes) em respostas que passam por ele.

Exemplo de Configuração#

location / {
    ssi on;
#    ...
}

Diretivas#

ssi#

Sintaxe

ssi on | off;

Padrão

ssi off;

Contexto

http, server, location, if in location

Habilita ou desabilita o processamento de comandos SSI em respostas.

ssi_last_modified#

Sintaxe

ssi_last_modified on | off;

Padrão

ssi_last_modified off;

Contexto

http, server, location

Permite preservar o campo de cabeçalho Last-Modified da resposta original durante o processamento SSI para facilitar o cache de resposta.

Por padrão, o campo de cabeçalho é removido pois o conteúdo da resposta é modificado durante o processamento e pode conter elementos gerados dinamicamente ou partes que são alteradas independentemente da resposta original.

ssi_min_file_chunk#

Sintaxe

ssi_min_file_chunk size;

Padrão

ssi_min_file_chunk 1k;

Contexto

http, server, location

Define o tamanho mínimo para partes de uma resposta armazenada em disco, a partir do qual faz sentido enviá-las usando sendfile.

ssi_silent_errors#

Sintaxe

ssi_silent_errors on | off;

Padrão

ssi_silent_errors off;

Contexto

http, server, location

Se habilitado, suprime a saída da string "[an error occurred while processing the directive]" se um erro ocorreu durante o processamento SSI.

ssi_types#

Sintaxe

ssi_types mime-type ...;

Padrão

ssi_types text/html;

Contexto

http, server, location

Habilita o processamento de comandos SSI em respostas com os tipos MIME especificados além de text/html. O valor especial "*" corresponde a qualquer tipo MIME.

ssi_value_length#

Sintaxe

ssi_value_length length;

Padrão

ssi_value_length 256;

Contexto

http, server, location

Define o comprimento máximo dos valores de parâmetros em comandos SSI.

Comandos SSI#

Os comandos SSI têm o seguinte formato genérico:

<!--# command parameter1=value1 parameter2=value2 ... -->

Os seguintes comandos são suportados:

block#

Define um bloco que pode ser usado como um stub no comando include. O bloco pode conter outros comandos SSI. O comando tem o seguinte parâmetro:

name#

nome do bloco.

Exemplo:

<!--# block name="one" -->
stub
<!--# endblock -->

config#

Define alguns parâmetros usados durante o processamento SSI, especificamente:

errmsg#

uma string que é exibida se um erro ocorre durante o processamento SSI. Por padrão, a seguinte string é exibida:

`[an error occurred while processing the directive]`

timefmt#

uma string de formato passada para a função strftime() usada para exibir data e hora. Por padrão, o seguinte formato é usado:

`"%A, %d-%b-%Y %H:%M:%S %Z"`

O formato "%s" é adequado para exibir tempo em segundos.

echo#

Exibe o valor de uma variável. O comando tem os seguintes parâmetros:

var#

o nome da variável.

encoding#

o método de codificação. Os valores possíveis incluem none, url, e entity. Por padrão, entity é usado.

default#

um parâmetro não-padrão que define uma string a ser exibida se uma variável não estiver definida. Por padrão, (none) é exibido.

O comando

<!--# echo var="name" default="no" -->

substitui a seguinte sequência de comandos:

<!--# if expr="$name" --><!--# echo var="name" --><!--#
     else -->no<!--# endif -->

if#

Executa uma inclusão condicional. Os seguintes comandos são suportados:

<!--# if expr="..." -->
...
<!--# elif expr="..." -->
...
<!--# else -->
...
<!--# endif -->

Apenas um nível de aninhamento é atualmente suportado. O comando tem o seguinte parâmetro:

expr#

expressão. Uma expressão pode ser:

  • verificação de existência de variável:

<!--# if expr="$name" -->
  • comparação de uma variável com um texto:

<!--# if expr="$name = text" -->
<!--# if expr="$name != text" -->
  • comparação de uma variável com uma expressão regular:

<!--# if expr="$name = /text/" -->
<!--# if expr="$name != /text/" -->

Se um text contém variáveis, seus valores são substituídos. Uma expressão regular pode conter capturas posicionais e nomeadas que podem ser usadas posteriormente através de variáveis, por exemplo:

<!--# if expr="$name = /(.+)@(?P<domain>.+)/" -->
  <!--# echo var="1" -->
  <!--# echo var="domain" -->
<!--# endif -->

include#

Inclui o resultado de outra requisição em uma resposta. O comando tem os seguintes parâmetros:

file#

especifica um arquivo incluído, por exemplo:

<!--# include file="footer.html" -->

virtual#

especifica uma requisição incluída, por exemplo:

<!--# include virtual="/remote/body.php?argument=value" -->

Várias requisições especificadas em uma página e processadas por servidores proxy ou FastCGI/uwsgi/SCGI/gRPC executam em paralelo. Se o processamento sequencial for desejado, o parâmetro wait deve ser usado.

stub#

um parâmetro não-padrão que nomeia o bloco cujo conteúdo será exibido se a requisição incluída resultar em um corpo vazio ou se um erro ocorrer durante o processamento da requisição, por exemplo:

<!--# block name="one" -->&nbsp;<!--# endblock -->
<!--# include virtual="/remote/body.php?argument=value" stub="one" -->

O conteúdo do bloco de substituição é processado no contexto da requisição incluída.

wait#

um parâmetro não-padrão que instrui a aguardar que uma requisição seja completamente finalizada antes de continuar com o processamento SSI, por exemplo:

<!--# include virtual="/remote/body.php?argument=value" wait="yes" -->

set#

um parâmetro não-padrão que instrui a escrever um resultado bem-sucedido do processamento da requisição na variável especificada, por exemplo:

<!--# include virtual="/remote/body.php?argument=value" set="one" -->

O tamanho máximo da resposta é definido pela diretiva subrequest_output_buffer_size:

location /remote/ {
    subrequest_output_buffer_size 64k;
#    ...
}

set#

Define um valor de uma variável. O comando possui os seguintes parâmetros:

var#

o nome da variável.

value#

o valor da variável. Se um valor atribuído contém variáveis, seus valores são substituídos.

Variáveis Internas#

$date_local#

horário atual no fuso horário local. O formato é definido pelo comando config com o parâmetro timefmt.

$date_gmt#

horário atual em GMT. O formato é definido pelo comando config com o parâmetro timefmt.