<!-- review: finished -->

<a id="http-ssi"></a>

# SSI

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

<a id="configuration-example-41"></a>

## Exemplo de Configuração

```nginx
location / {
    ssi on;
#    ...
}
```

<a id="directives-44"></a>

## Diretivas

<a id="index-0"></a>

<a id="id1"></a>

### ssi

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi` `on` | `off`;                    |
|-------------------------------------------------------------------------------------------|----------------------------------------|
| Padrão                                                                                    | `ssi off;`                             |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location, if in location |

Habilita ou desabilita o processamento de comandos SSI em respostas.

<a id="index-1"></a>

<a id="ssi-last-modified"></a>

### ssi_last_modified

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi_last_modified` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|-------------------------------------|
| Padrão                                                                                    | `ssi_last_modified off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | 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.

<a id="index-2"></a>

<a id="ssi-min-file-chunk"></a>

### ssi_min_file_chunk

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi_min_file_chunk` size;   |
|-------------------------------------------------------------------------------------------|------------------------------|
| Padrão                                                                                    | `ssi_min_file_chunk 1k;`     |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | 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](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#sendfile).

<a id="index-3"></a>

<a id="ssi-silent-errors"></a>

### ssi_silent_errors

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi_silent_errors` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|-------------------------------------|
| Padrão                                                                                    | `ssi_silent_errors off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | 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.

<a id="index-4"></a>

<a id="ssi-types"></a>

### ssi_types

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi_types` mime-type ...;   |
|-------------------------------------------------------------------------------------------|------------------------------|
| Padrão                                                                                    | `ssi_types text/html;`       |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | 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.

<a id="index-5"></a>

<a id="ssi-value-length"></a>

### ssi_value_length

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssi_value_length` length;   |
|-------------------------------------------------------------------------------------------|------------------------------|
| Padrão                                                                                    | `ssi_value_length 256;`      |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location       |

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

<a id="ssi-commands"></a>

## Comandos SSI

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

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

Os seguintes comandos são suportados:

<a id="samp-block"></a>

### `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:

<a id="samp-name"></a>

#### `name`

nome do bloco.

Exemplo:

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

<a id="samp-config"></a>

### `config`

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

<a id="samp-errmsg"></a>

#### `errmsg`

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

```none
`[an error occurred while processing the directive]`
```

<a id="samp-timefmt"></a>

#### `timefmt`

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

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

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

<a id="samp-echo"></a>

### `echo`

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

<a id="samp-var"></a>

#### `var`

o nome da variável.

<a id="samp-encoding"></a>

#### `encoding`

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

<a id="samp-default"></a>

#### `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

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

substitui a seguinte sequência de comandos:

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

<a id="samp-if"></a>

### `if`

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

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

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

<a id="samp-expr"></a>

#### `expr`

expressão. Uma expressão pode ser:

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

```html
<!--# if expr="$name" -->
```

* comparação de uma variável com um texto:

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

* comparação de uma variável com uma expressão regular:

```html
<!--# 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:

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

<a id="samp-include"></a>

### `include`

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

<a id="samp-file"></a>

#### `file`

especifica um arquivo incluído, por exemplo:

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

<a id="samp-virtual"></a>

#### `virtual`

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

```html
<!--# 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.

<a id="samp-stub"></a>

#### `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:

```html
<!--# 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.

<a id="samp-wait"></a>

#### `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:

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

<a id="ssi-include-set"></a>

#### `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:

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

O tamanho máximo da resposta é definido pela diretiva [subrequest_output_buffer_size](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#subrequest-output-buffer-size):

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

<a id="samp-set"></a>

### `set`

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

#### `var`

o nome da variável.

<a id="samp-value"></a>

#### `value`

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

<a id="built-in-variables-11"></a>

## Variáveis Integradas

<a id="v-date-local"></a>

### `$date_local`

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

<a id="v-date-gmt"></a>

### `$date_gmt`

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