<!-- review: finished -->

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

# Upstream Probe

El módulo implementa sondeos activos de salud
para [stream_upstream](https://es.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#stream-upstream).

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

## Ejemplo de configuración

```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
Según RFC 2616 (HTTP/1.1) y RFC 9110 (Semántica HTTP), las cabeceras HTTP
deben estar separadas por una secuencia CRLF (`\r\n`) en lugar de solo
`\n`.

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

## Directivas

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

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

### upstream_probe (PRO)

| [Sintaxis](https://es.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];   |
|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                                                                                                                                                                                |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                                                                                                                                                                                                                                                           |

Define un sondeo activo de salud para servidores dentro del grupo [upstream](https://es.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-upstream)
especificado en la directiva [proxy_pass](https://es.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#s-proxy-pass)
en el mismo contexto `server` donde se encuentra la directiva `upstream_probe`.

Un servidor pasa el sondeo si la solicitud tiene éxito, considerando todos
los parámetros de configuración de la directiva `upstream_probe` y todos los parámetros que
afectan cómo se utilizan los upstreams por el contexto `server` donde está definido,
incluyendo la directiva [proxy_next_upstream](https://es.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#s-proxy-next-upstream).

Para hacer uso de los sondeos,
el upstream debe tener una zona de memoria compartida ([zone](https://es.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-zone)).
Un upstream puede configurarse con varios sondeos.

Se aceptan los siguientes parámetros:

| `name`               | Nombre obligatorio del sondeo.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `port`               | Número de puerto alternativo para la solicitud de sondeo.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `interval`           | [Intervalo](https://es.angie.software//angie/docs/configuration/configfile.md#syntax) entre sondeos.<br/>Por defecto — `5s`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `test`               | La condición para el sondeo, definida como una cadena de variables.<br/>Si la sustitución de variables produce `""` o `"0"`,<br/>el sondeo no se supera.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `essential`          | Si se establece, se comprueba el estado inicial del servidor, por lo que el servidor<br/>no recibe solicitudes de clientes hasta que se supere el sondeo.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `persistent`         | Configurar este parámetro requiere habilitar primero `essential`;<br/>los servidores `persistent` que se consideraron saludables antes de una<br/>[recarga de configuración](https://es.angie.software//angie/docs/configuration/configfile.md#configfile-reloading)<br/>comienzan a recibir solicitudes sin necesidad de superar este sondeo primero.                                                                                                                                                                                                                                                                                                                                                                  |
| `fails`              | Número de sondeos fallidos consecutivos que<br/>hacen que el servidor se considere no saludable.<br/>Por defecto — 1.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `passes`             | Número de sondeos exitosos consecutivos que<br/>hacen que el servidor se considere saludable.<br/>Por defecto — 1.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `max_response`       | Tamaño máximo de memoria para la respuesta. Si se especifica un<br/>[valor](https://es.angie.software//angie/docs/configuration/configfile.md#syntax) cero, se deshabilita la espera de la respuesta.<br/>Por defecto — `256k`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `mode`               | Modo de sondeo, dependiendo del estado de los servidores:<br/><br/>- `always` — los servidores son sondeados independientemente de su estado;<br/>- `idle` — los sondeos afectan a servidores no saludables y servidores donde<br/>  ha transcurrido `interval` desde la última solicitud del cliente.<br/>- `onfail` — solo se sondean los servidores no saludables.<br/><br/>Por defecto — `always`.                                                                                                                                                                                                                                                                                                                  |
| `udp`                | Si se especifica, se utiliza el protocolo UDP para el sondeo.<br/>Por defecto, TCP se utiliza para el sondeo.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `send`               | Datos enviados para el sondeo: datos en línea con el prefijo `data:`<br/>o una ruta de archivo (absoluta o relativa a `/usr/local/angie/`).<br/><br/>Al usar un archivo:<br/><br/>- El [proceso worker](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-processes) abre y lee<br/>  el archivo en cada acceso; el contenido no se almacena en caché en memoria.<br/>- No se requiere recarga de configuración cuando el archivo cambia;<br/>  el nuevo contenido se leerá en el siguiente acceso.<br/>- Permisos de acceso requeridos: `644` para el archivo,<br/>  `755` para el directorio.<br/>- Actualice los archivos usando el comando move (`mv`),<br/>  no mediante edición directa. |
| `ping` (PRO)         | Utiliza solicitudes de eco ICMP en lugar de sondeos TCP/UDP.<br/>Requiere que Angie se compile con `--with-stream_upstream_probe_icmp`.<br/>No es compatible con `test`, `port`,<br/>`udp` o `send`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `ping_timeout` (PRO) | Tiempo de espera para recibir una respuesta de eco ICMP.<br/>Por defecto — `1s`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |

Ejemplo:

```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";
}
```

Detalles de operación del sondeo:

- Inicialmente, el servidor no recibirá solicitudes de clientes
  hasta que supere *todos* los sondeos `essential` configurados para él,
  omitiendo los `persistent` si la configuración se recargó
  y el servidor se consideraba saludable antes de eso.
  Si no hay tales sondeos, el servidor se considera saludable.
- El servidor se considera no saludable y no recibirá solicitudes de clientes,
  si *cualquiera* de los sondeos configurados para él alcanza `fails`
  o el servidor alcanza [max_fails](https://es.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-max-fails).
- Para que un servidor no saludable se considere saludable nuevamente,
  *todos* los sondeos configurados para él deben alcanzar sus respectivos `passes`;
  después de eso, también se considera [max_fails](https://es.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-max-fails).

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

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

### upstream_probe_timeout (PRO)

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `upstream_probe_timeout` time;   |
|--------------------------------------------------------------------------------------------|----------------------------------|
| Predeterminado                                                                             | `upstream_probe_timeout 50s;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                           |

Establece el [tiempo](https://es.angie.software//angie/docs/configuration/configfile.md#syntax) máximo de inactividad para una conexión establecida con el servidor para sondeos de salud configurados mediante la directiva [upstream_probe (PRO)](#s-u-upstream-probe); si se supera este límite, la conexión se cerrará.

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

## Variables integradas

El módulo `stream_upstream` admite las siguientes variables integradas:

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

### `$upstream_probe` (PRO)

Nombre del [upstream_probe](#s-u-upstream-probe) actualmente activo.

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

### `$upstream_probe_response` (PRO)

Contenido de la respuesta recibida durante un sondeo activo configurado por
[upstream_probe](#s-u-upstream-probe).
