<!-- review: finished -->

<a id="stream-upstream-probe"></a>

# Upstream Probe

O módulo implementa sondas de saúde ativas
para [stream_upstream](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#stream-upstream).

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

## Exemplo de Configuração

```nginx
server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\r\n\r\n";
}
```

#### NOTE
De acordo com a RFC 2616 (HTTP/1.1) e RFC 9110 (HTTP Semantics), os cabeçalhos HTTP
devem ser separados por uma sequência CRLF (`\r\n`) ao invés de apenas
`\n`.

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

## Diretivas

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

<a id="s-u-upstream-probe"></a>

### upstream_probe (PRO)

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `upstream_probe` name [`port=`number] [`interval=`time] [`test=`condition] [`essential` [`persistent`]] [`fails=`number] [`passes=`number] [`max_response=`size] [`mode=``always` | `idle` | `onfail`] [`udp`] [`send=`string] [`ping`] [`ping_timeout=`time];   |
|-------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Padrão                                                                                    | —                                                                                                                                                                                                                                                                |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | server                                                                                                                                                                                                                                                           |

Define uma sonda de saúde ativa para servidores dentro do grupo [upstream](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-upstream)
especificado na diretiva [proxy_pass](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#s-proxy-pass)
no mesmo contexto `server` onde a diretiva `upstream_probe` está localizada.

Um servidor passa na sonda se a requisição para ele for bem-sucedida, considerando todas
as configurações de parâmetros da diretiva `upstream_probe` e todos os parâmetros que
afetam como os upstreams são usados pelo contexto `server` onde está definido,
incluindo a diretiva [proxy_next_upstream](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#s-proxy-next-upstream).

Para fazer uso das sondas,
o upstream deve ter uma zona de memória compartilhada ([zone](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-zone)).
Um upstream pode ser configurado com várias sondas.

Os seguintes parâmetros são aceitos:

| `name`               | Nome obrigatório da sonda.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `port`               | Número de porta alternativo para a requisição da sonda.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `interval`           | [Intervalo](https://pt.angie.software//angie/docs/configuration/configfile.md#syntax) entre sondas.<br/>Por padrão — `5s`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `test`               | A condição para a sonda, definida como uma string de variáveis.<br/>Se a substituição das variáveis resultar em `""` ou `"0"`,<br/>a sonda não é aprovada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `essential`          | Se definido, o estado inicial do servidor está sendo verificado, então o servidor<br/>não recebe requisições de clientes até que a sonda seja aprovada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `persistent`         | Definir este parâmetro requer habilitar `essential` primeiro;<br/>servidores `persistent` que foram considerados saudáveis antes de um<br/>[recarregamento de configuração](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile-reloading)<br/>começam a receber requisições sem serem obrigados a passar nesta sonda primeiro.                                                                                                                                                                                                                                                                                                                                              |
| `fails`              | Número de sondas falhadas subsequentes que<br/>tornam o servidor não saudável.<br/>Por padrão — 1.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `passes`             | Número de sondas aprovadas subsequentes que<br/>tornam o servidor saudável.<br/>Por padrão — 1.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `max_response`       | Tamanho máximo de memória para a resposta. Se um<br/>[valor](https://pt.angie.software//angie/docs/configuration/configfile.md#syntax) zero for especificado, a espera por resposta é desabilitada.<br/>Por padrão — `256k`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `mode`               | Modo da sonda, dependendo da saúde dos servidores:<br/><br/>- `always` — servidores são sondados independentemente de seu estado;<br/>- `idle` — sondas afetam servidores não saudáveis e servidores onde<br/>  `interval` passou desde a última requisição do cliente.<br/>- `onfail` — apenas servidores não saudáveis são sondados.<br/><br/>Por padrão — `always`.                                                                                                                                                                                                                                                                                                                                |
| `udp`                | Se especificado, o protocolo UDP é usado para sondagem.<br/>Por padrão, TCP é usado para sondagem.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `send`               | Dados enviados para a sonda: dados inline com o prefixo `data:`<br/>ou um caminho de arquivo (absoluto ou relativo a `/usr/local/angie/`).<br/><br/>Ao usar um arquivo:<br/><br/>- O [processo worker](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-processes) abre e lê<br/>  o arquivo a cada acesso; o conteúdo não é armazenado em cache na memória.<br/>- Recarregamento de configuração não é necessário quando o arquivo muda;<br/>  o novo conteúdo será lido no próximo acesso.<br/>- Permissões de acesso necessárias: `644` para o arquivo,<br/>  `755` para o diretório.<br/>- Atualize arquivos usando o comando move (`mv`),<br/>  não por edição direta. |
| `ping` (PRO)         | Usa requisições ICMP echo ao invés de sondas TCP/UDP.<br/>Requer que o Angie seja compilado com `--with-stream_upstream_probe_icmp`.<br/>Não é compatível com `test`, `port`,<br/>`udp`, ou `send`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `ping_timeout` (PRO) | Timeout para aguardar uma resposta ICMP echo.<br/>Por padrão — `1s`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

Exemplo:

```nginx
upstream backend {
    zone backend 1m;

    server a.example.com;
    server b.example.com;
}

map $upstream_probe_response $good {
    ~200    "1";
    default  "";
}

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        persistent
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\r\n\r\n";
}
```

Detalhes da operação da sonda:

- Inicialmente, o servidor não receberá requisições de clientes
  até que passe em *todas* as sondas `essential` configuradas para ele,
  pulando as `persistent` se a configuração foi recarregada
  e o servidor foi considerado saudável antes disso.
  Se não há tais sondas, o servidor é considerado saudável.
- O servidor é considerado não saudável e não receberá requisições de clientes,
  se *qualquer* das sondas configuradas para ele atingir `fails`
  ou o servidor atingir [max_fails](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-max-fails).
- Para um servidor não saudável ser considerado saudável novamente,
  *todas* as sondas configuradas para ele devem atingir seus respectivos `passes`;
  depois disso, [max_fails](https://pt.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-max-fails) também é considerado.

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

<a id="s-u-upstream-probe-timeout"></a>

### upstream_probe_timeout (PRO)

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `upstream_probe_timeout` time;   |
|-------------------------------------------------------------------------------------------|----------------------------------|
| Padrão                                                                                    | `upstream_probe_timeout 50s;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | server                           |

Define o [tempo](https://pt.angie.software//angie/docs/configuration/configfile.md#syntax) máximo de inatividade para uma conexão estabelecida com o servidor para sondas de saúde configuradas usando a diretiva [upstream_probe (PRO)](#s-u-upstream-probe); se este limite for excedido, a conexão será fechada.

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

## Variáveis Integradas

O módulo `stream_upstream` suporta as seguintes variáveis integradas:

<a id="v-s-upstream-probe"></a>

### `$upstream_probe` (PRO)

Nome da [upstream_probe](#s-u-upstream-probe) atualmente ativa.

<a id="v-s-upstream-probe-response"></a>

### `$upstream_probe_response` (PRO)

Conteúdo da resposta recebida durante uma sonda ativa configurada por
[upstream_probe](#s-u-upstream-probe).
