<!-- review: finished -->

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

# Upstream Probe

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

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

## Ejemplo de configuración

```nginx
server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}
```

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

## Directivas

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

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

### upstream_probe (PRO)

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `upstream_probe` name [`uri=`address] [`port=`number] [`interval=`time] [`method=`method] [`test=`condition] [`essential` [`persistent`]] [`fails=`number] [`passes=`number] [`max_body=`size] [`mode=``always` | `idle` | `onfail`] [`ping`] [`ping_timeout=`time];   |
|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                                                                                                                                                                                      |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | location                                                                                                                                                                                                                                                               |

Define un sondeo activo de salud para servidores dentro de los grupos [upstream](https://es.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-upstream)
que se especifican en [proxy_pass](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass), [uwsgi_pass](https://es.angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-pass) y directivas similares
en el mismo contexto `location` que la directiva `upstream_probe`.
Angie realiza regularmente solicitudes según los parámetros especificados
a cada servidor en el grupo upstream.

Un servidor pasa el sondeo si la solicitud tiene éxito, considerando todas
las configuraciones de parámetros de la directiva `upstream_probe` y todos los parámetros que
controlan cómo se utilizan los upstreams por el contexto `location` donde está definido.
Esto incluye las directivas [proxy_next_upstream](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-next-upstream) y [uwsgi_next_upstream](https://es.angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-next-upstream),
etc., así como [proxy_set_header](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-set-header) y similares.

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

Se aceptan los siguientes parámetros:

| `name`               | Nombre obligatorio del sondeo.                                                                                                                                                                                                                                                                                                                                                                            |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `uri`                | URI de solicitud que se añadirá al argumento de [proxy_pass](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass),<br/>[uwsgi_pass](https://es.angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-pass), etc. Por defecto — `/`.                                                                                                             |
| `port`               | Número de puerto alternativo para la solicitud de sondeo.                                                                                                                                                                                                                                                                                                                                                 |
| `interval`           | Intervalo entre sondeos. Por defecto — `5s`.                                                                                                                                                                                                                                                                                                                                                              |
| `method`             | Método HTTP de la solicitud de sondeo. Por defecto — `GET`.                                                                                                                                                                                                                                                                                                                                               |
| `test`               | La condición que se verificará durante la solicitud; definida como una cadena con variables.<br/>Si la sustitución de variables produce `""` o `"0"`,<br/>el sondeo falla.                                                                                                                                                                                                                                |
| `essential`          | Si se establece, el estado inicial del servidor está sujeto a verificación<br/>y las solicitudes del cliente no se reenvían a él hasta que el sondeo sea superado.                                                                                                                                                                                                                                        |
| `persistent`         | Configurar este parámetro requiere habilitar primero `essential`;<br/>los servidores `persistent` que estaban funcionando 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 pasar este sondeo primero.                                                             |
| `fails`              | Número de solicitudes fallidas consecutivas que<br/>hacen que el servidor se considere no saludable. Por defecto — 1.                                                                                                                                                                                                                                                                                     |
| `passes`             | Número de solicitudes exitosas consecutivas que<br/>hacen que el servidor se considere saludable. Por defecto — 1.                                                                                                                                                                                                                                                                                        |
| `max_body`           | Cantidad máxima de memoria para el cuerpo de la respuesta. Por defecto — `256k`.                                                                                                                                                                                                                                                                                                                          |
| `mode`               | Modo de sondeo, dependiendo de la salud de los servidores:<br/><br/>- `always` — los servidores se sondean independientemente de su estado;<br/>- `idle` — los sondeos afectan a servidores no saludables y a servidores donde<br/>  ha transcurrido `interval` desde la última solicitud del cliente.<br/>- `onfail` — solo los servidores no saludables son sondeados.<br/><br/>Por defecto — `always`. |
| `ping` (PRO)         | Utiliza solicitudes de eco ICMP en lugar de sondeos HTTP.<br/>Requiere que Angie se compile con `--with-http_upstream_probe_icmp`.<br/>No es compatible con `test`, `port`,<br/>`method` o `uri`.                                                                                                                                                                                                         |
| `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 backend1.example.com;
    server backend2.example.com;
}

map $upstream_status $good {
    200     "1";
}

server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            persistent
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}
```

Detalles de la operación de 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 su umbral `fails`
  o el propio servidor alcanza el umbral [max_fails](https://es.angie.software//angie/docs/configuration/modules/http/http_upstream.md#max-fails).
- Para que un servidor no saludable se considere saludable nuevamente,
  *todos* los sondeos configurados para él deben alcanzar sus respectivos umbrales `passes`;
  después de eso, se considera el umbral [max_fails](https://es.angie.software//angie/docs/configuration/modules/http/http_upstream.md#max-fails).

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

## Variables integradas

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

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

### `$upstream_probe` (PRO)

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

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

### `$upstream_probe_body` (PRO)

Cuerpo de la respuesta del servidor
recibido durante un [upstream_probe](#u-upstream-probe);
su tamaño está limitado por `max_body`.
