<a id="stream-core"></a>

# Módulo Stream

El módulo stream principal implementa la funcionalidad básica para gestionar
conexiones TCP y UDP: esto incluye definir bloques de servidor, enrutamiento de tráfico,
configuración de proxy, soporte SSL/TLS y gestión de conexiones para servicios de streaming,
como bases de datos, DNS y otros protocolos que operan sobre TCP y UDP.

Los demás módulos de esta sección amplían esta funcionalidad, permitiendo configurar
y optimizar de forma flexible el servidor stream para diversos escenarios y requisitos.

Al [compilar desde el código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo no se construye por defecto;
debe habilitarse con la
`‑‑with‑stream`
[opción de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure).
En los paquetes e imágenes de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages),
el módulo está incluido en la compilación.

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

## Ejemplo de configuración

```nginx
worker_processes auto;

error_log /var/log/angie/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}
```

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

## Directivas

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

<a id="s-listen"></a>

### listen

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `listen` address[:port] [`ssl`] [`udp`] [`proxy_protocol`] [`setfib=`number] [`fastopen=`number] [`backlog=`number] [`rcvbuf=`size] [`sndbuf=`size] [`accept_filter=`filter] [`deferred`] [`bind`] [`ipv6only=``on` | `off`] [`reuseport`] [`so_keepalive=`on|off|[`keepidle`]:[`keepintvl`]:[`keepcnt`]];   |
|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                                                                                                                                                                                                                            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                                                                                                                                                                                                                                                                                                       |

Define la address y el port del socket en el que el servidor aceptará conexiones.
Es posible especificar solo el port, de modo que Angie escuche en todas las interfaces IPv4
disponibles (y también IPv6, si está habilitado). La dirección también puede ser un nombre de host,
por ejemplo:

```nginx
listen 127.0.0.1:12345;
listen *:12345;
listen 12345;     # igual que *:12345
listen localhost:12345;
```

Las direcciones IPv6 se especifican entre corchetes:

```nginx
listen [::1]:12345;
listen [::]:12345;
```

Los sockets de dominio UNIX se especifican con el prefijo `unix:`:

```nginx
listen unix:/var/run/angie.sock;
```

Los rangos de puertos se indican con el primer y último puerto separados por un guion:

```nginx
listen 127.0.0.1:12345-12399;
listen 12345-12399;
```

#### NOTE
Los distintos servidores deben escuchar en pares address:port diferentes.

| `ssl`            | permite especificar que todas las conexiones aceptadas en este puerto funcionen en modo SSL.                                                                                               |
|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `udp`            | configura un socket de escucha para trabajar con datagramas. Para gestionar paquetes de la misma dirección y puerto en la misma sesión, también debe especificarse el parámetro reuseport. |
| `proxy_protocol` | permite especificar que todas las conexiones aceptadas en este puerto utilicen el protocolo PROXY.                                                                                         |

La directiva `listen` puede tener varios parámetros adicionales específicos de las llamadas al sistema relacionadas con sockets.

| `setfib=`number        | establece la tabla de enrutamiento asociada, FIB (la opción `SO_SETFIB`) para el socket de escucha. Actualmente solo funciona en FreeBSD.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `fastopen=`number      | habilita "TCP Fast Open" para el socket de escucha y [limita](https://datatracker.ietf.org/doc/html/rfc7413#section-5.1) la longitud máxima de la cola de conexiones que aún no han completado el *three-way handshake*.<br/><br/>#### WARNING<br/>No habilite esta función a menos que el servidor pueda gestionar la recepción del [mismo paquete SYN con datos](https://datatracker.ietf.org/doc/html/rfc7413#section-6.1) más de una vez.                                                                                                                                                                                                                                    |
| `backlog=`number       | establece el parámetro `backlog` en la llamada `listen()` que limita la longitud máxima de la cola de conexiones pendientes. Por defecto, `backlog` se establece en `-1` en FreeBSD, DragonFly BSD y macOS, y en 511 en otras plataformas.                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `rcvbuf=`size          | establece el tamaño del *buffer* de recepción (opción `SO_RCVBUF`) para el socket de escucha.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `sndbuf=`size          | establece el tamaño del *buffer* de envío (opción `SO_SNDBUF`) para el socket de escucha.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `accept_filter=`filter | establece el nombre del filtro de aceptación (opción `SO_ACCEPTFILTER`) para el socket de escucha, que filtra conexiones entrantes antes de pasarlas a `accept()`. Funciona solo en FreeBSD y NetBSD 5.0+. Valores aceptados: `dataready` y `httpready`.                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `deferred`             | indica usar un `accept()` diferido (opción de socket `TCP_DEFER_ACCEPT`) en Linux.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `bind`                 | este parámetro indica realizar una llamada `bind()` separada para un par address:port determinado. Si hay varias directivas `listen` con el mismo port pero distintas direcciones, y una de ellas escucha en todas las direcciones para ese puerto (\*:port), Angie hará `bind()` solo a \*:port. Debe tenerse en cuenta que en este caso se ejecutará la llamada al sistema `getsockname()` para determinar la dirección que aceptó la conexión. Si se usan los parámetros `setfib`, `fastopen`, `backlog`, `rcvbuf`, `sndbuf`, `accept_filter`, `deferred`, `ipv6only`, `reuseport` o `so_keepalive`, siempre se hará una llamada `bind()` separada para ese par address:port. |
| `ipv6only=on` | `off`  | este parámetro determina (mediante la opción de socket `IPV6_V6ONLY`) si un socket IPv6 que escucha en la dirección comodín [::] aceptará solo conexiones IPv6 o tanto IPv6 como IPv4. Este parámetro está activado por defecto. Solo puede configurarse una vez al inicio.                                                                                                                                                                                                                                                                                                                                                                                                      |
| `reuseport`            | este parámetro indica crear un socket de escucha individual para cada proceso *worker* (usando la opción de socket `SO_REUSEPORT` en Linux 3.9+ y DragonFly BSD, o `SO_REUSEPORT_LB` en FreeBSD 12+), permitiendo al kernel distribuir las conexiones entrantes entre procesos *worker*. Actualmente funciona solo en Linux 3.9+, DragonFly BSD y FreeBSD 12+.<br/><br/>#### WARNING<br/>El uso inapropiado de esta opción puede tener implicaciones de seguridad.                                                                                                                                                                                                               |
| `multipath`            | habilita la aceptación de conexiones mediante el protocolo [Multipath TCP](https://en.wikipedia.org/wiki/Multipath_TCP) (MPTCP), soportado en el kernel de Linux desde la versión 5.6. Este parámetro es **incompatible** con `udp`.                                                                                                                                                                                                                                                                                                                                                                                                                                             |

`so_keepalive=on` | `off` | [`keepidle`]:[`keepintvl`]:[`keepcnt`]

Configura el comportamiento de "TCP keepalive" para el socket de escucha.

| `''`   | si se omite este parámetro, se aplicará la configuración del sistema operativo para el socket   |
|--------|-------------------------------------------------------------------------------------------------|
| `on`   | activa la opción SO_KEEPALIVE para el socket                                                    |
| `off`  | desactiva la opción SO_KEEPALIVE para el socket                                                 |

Algunos sistemas operativos permiten establecer parámetros de TCP keepalive por socket
usando las opciones de socket `TCP_KEEPIDLE`, `TCP_KEEPINTVL` y
`TCP_KEEPCNT`. En dichos sistemas (actualmente Linux 2.4+, NetBSD 5+ y FreeBSD 9.0-STABLE),
pueden configurarse usando los parámetros keepidle, keepintvl y keepcnt.
Se pueden omitir uno o dos parámetros, en cuyo caso se aplicará la configuración por defecto del sistema
para la opción de socket correspondiente.

Por ejemplo,

```nginx
so_keepalive=30m::10
```

establecerá el tiempo de inactividad (`TCP_KEEPIDLE`) en 30 minutos,
mantendrá el intervalo de sondeo (`TCP_KEEPINTVL`) en el valor por defecto del sistema,
y fijará el número de sondeos (`TCP_KEEPCNT`) en 10 sondeos.

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

<a id="s-preread-buffer-size"></a>

### preread_buffer_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `preread_buffer_size` size;   |
|--------------------------------------------------------------------------------------------|-------------------------------|
| Predeterminado                                                                             | `preread_buffer_size 16k;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                |

Especifica el tamaño del *buffer* de [preread](https://es.angie.software//angie/docs/configuration/processing.md#stream-sessions).

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

<a id="s-preread-timeout"></a>

### preread_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `preread_timeout` timeout;   |
|--------------------------------------------------------------------------------------------|------------------------------|
| Predeterminado                                                                             | `preread_timeout 30s;`       |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server               |

Especifica un timeout para la fase de [preread](https://es.angie.software//angie/docs/configuration/processing.md#stream-sessions).

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

<a id="s-proxy-protocol-timeout"></a>

### proxy_protocol_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `proxy_protocol_timeout` timeout;   |
|--------------------------------------------------------------------------------------------|-------------------------------------|
| Predeterminado                                                                             | `proxy_protocol_timeout 30s;`       |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                      |

Especifica un timeout para completar la lectura de la cabecera del protocolo PROXY. Si no se transmite la cabecera completa en este tiempo, la conexión se cierra.

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

<a id="s-resolver"></a>

### resolver

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver` address ... [`valid=`time] [`ipv4=``on` | `off`] [`ipv6=``on` | `off`] [`status_zone=`zone];   |
|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                         |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server, upstream                                                                                  |

Configura los servidores de nombres utilizados para resolver nombres de servidores upstream en direcciones, por ejemplo:

```nginx
resolver 127.0.0.53 [::1]:5353;
```

La dirección puede especificarse como un nombre de dominio o una dirección IP, con un puerto opcional. Si no se especifica puerto, se usa el puerto 53. Los servidores de nombres se consultan en orden round-robin.

#### NOTE
Se recomienda usar un resolver local de confianza, como `127.0.0.53`
(systemd-resolved), en lugar de uno público (p.ej., `8.8.8.8`). Los
resolvers públicos exponen las consultas DNS a terceros y aumentan el
riesgo de ataques de envenenamiento de caché.

#### NOTE
El valor de la directiva es heredado por bloques anidados
y puede sobrescribirse en ellos si es necesario.
Dentro de un único bloque, la directiva solo puede especificarse una vez.
Si se repite, la última definición tiene efecto.

Por defecto, Angie almacena en caché las respuestas usando el valor TTL de la respuesta. Si
la directiva `resolver` no se especifica y no se realizan consultas DNS dinámicas
(por ejemplo, al usar nombres fijos en [Proxy](https://es.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#stream-proxy) sin
variables), no es necesario especificar un resolver: los nombres se resolverán al inicio
usando el resolver del sistema. El parámetro opcional `valid` permite
sobrescribir esto:

| `valid`   | parámetro *opcional* que permite sobrescribir la validez de la caché de respuestas   |
|-----------|--------------------------------------------------------------------------------------|
```nginx
resolver 127.0.0.53 [::1]:5353 valid=30s;
```

Por defecto, Angie buscará tanto direcciones IPv4 como IPv6 durante la resolución.

| `ipv4=off`   | desactiva la búsqueda de direcciones IPv4   |
|--------------|---------------------------------------------|
| `ipv6=off`   | desactiva la búsqueda de direcciones IPv6   |

<a id="s-resolver-status"></a>

| `status_zone`   | parámetro *opcional*;<br/>habilita la recopilación de métricas de solicitudes y respuestas de los servidores DNS<br/>([/status/resolvers/<zone>](https://es.angie.software//angie/docs/configuration/modules/http/http_api.md#api-status-resolvers))<br/>en la zona especificada   |
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

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

<a id="s-resolver-timeout"></a>

### resolver_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver_timeout` time;   |
|--------------------------------------------------------------------------------------------|----------------------------|
| Predeterminado                                                                             | `resolver_timeout 30s;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server, upstream   |

Define un *timeout* para la resolución de nombres, por ejemplo:

```nginx
resolver_timeout 5s;
```

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

<a id="s-error-log-user-tag"></a>

### error_log_user_tag

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `error_log_user_tag` value;   |
|--------------------------------------------------------------------------------------------|-------------------------------|
| Predeterminado                                                                             | —                             |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                |

Añade una etiqueta específica de sesión a los registros del *error log*. El value es un [valor complejo](https://es.angie.software//angie/docs/configuration/configfile.md#syntax)
y puede usar variables. La directiva puede especificarse varias veces para añadir múltiples etiquetas.
Las etiquetas pueden coincidir con `filter=tag:` en [error_log](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log).

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

<a id="s-server"></a>

### server

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server` { ... }   |
|--------------------------------------------------------------------------------------------|--------------------|
| Predeterminado                                                                             | —                  |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream             |

Define la configuración de un servidor.

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

<a id="s-server-name"></a>

### server_name

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_name` name ...;   |
|--------------------------------------------------------------------------------------------|---------------------------|
| Predeterminado                                                                             | `server_name "";`         |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                    |

Define los nombres de un servidor virtual.

#### WARNING
En el módulo `stream`, la directiva `server_name` se basa en la
*Server Name Indication* ([SNI](https://es.angie.software//angie/docs/configuration/ssl.md#sni)) y solo funciona con conexiones TLS.
Para usarla, debe [configurar la terminación TLS](https://es.angie.software//angie/docs/configuration/ssl.md#ssl-config) o
[habilitar TLS preread](https://es.angie.software//angie/docs/configuration/modules/stream/stream_ssl_preread.md#stream-ssl-preread) en el bloque `server` correspondiente.

Ejemplo de configuración:

```nginx
server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/angie/cert.pem;
    ssl_certificate_key /etc/angie/key.pem;
}
```

El primer nombre se convierte en el nombre principal del servidor.

Los nombres de servidor pueden incluir un asterisco (`*`)
para sustituir la primera o última parte de un nombre:

```nginx
server {
    server_name example.com *.example.com www.example.*;
}
```

Estos nombres se denominan *wildcard names*.

También se pueden usar expresiones regulares en nombres de servidor
anteponiendo el nombre con una tilde (`~`):

```none
server {
    server_name www.example.com ~^www\d+\.example\.com$;
}
```

Las expresiones regulares pueden incluir *captures* que se pueden usar en otras directivas:

```nginx
server {
    server_name ~^(www\.)?(.+)$;

    proxy_pass www.$2:12345;
}
```

Las *named captures* en expresiones regulares crean variables
que pueden usarse en otras directivas:

```nginx
server {
    server_name ~^(www\.)?(?<domain>.+)$;

    proxy_pass www.$domain:12345;
}
```

Si el parámetro de la directiva se establece en `$hostname`,
se insertará el nombre de host de la máquina.

Al buscar un servidor virtual por nombre, si el nombre coincide con más de una
de las variantes especificadas (p. ej., tanto un *wildcard name* como una expresión regular),
se elegirá la primera variante coincidente en el siguiente orden de prioridad:

- El nombre exacto
- El nombre comodín más largo que empieza con un asterisco, p. ej. `*.example.com`
- El nombre comodín más largo que termina con un asterisco, p. ej. `mail.*`
- La primera expresión regular coincidente (en orden de aparición en el archivo de configuración)

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

<a id="s-server-names-hash-bucket-size"></a>

### server_names_hash_bucket_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_names_hash_bucket_size` size;      |
|--------------------------------------------------------------------------------------------|--------------------------------------------|
| Predeterminado                                                                             | `server_names_hash_bucket_size 32|64|128;` |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream                                     |

Define el tamaño del *bucket* para las tablas *hash* de nombres de servidor.
El valor por defecto depende del tamaño de la línea de caché del procesador.

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

<a id="s-server-names-hash-max-size"></a>

### server_names_hash_max_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_names_hash_max_size` size;   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | `server_names_hash_max_size 512;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream                               |

Define el tamaño máximo de las tablas *hash* de nombres de servidor.

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

<a id="s-status-zone"></a>

### status_zone

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `status_zone` zone | key `zone=`zone[:count];   |
|--------------------------------------------------------------------------------------------|-------------------------------------------------|
| Predeterminado                                                                             | —                                               |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                                          |

Asigna una zona de memoria compartida para recopilar métricas de
[/status/stream/server_zones/<zone>](https://es.angie.software//angie/docs/configuration/modules/http/http_api.md#api-status-stream-server-zones).

Varios contextos `server` pueden compartir la misma zona para la recopilación de datos.

La sintaxis de valor único zone agrega todas las métricas del contexto actual
en una sola zona de memoria compartida:

```nginx
server {

    listen 80;
    server_name *.example.com;

    status_zone single;
    # ...
}
```

La sintaxis alternativa permite especificar los siguientes parámetros:

| key              | Una cadena con variables,<br/>cuyo valor determina la agrupación de conexiones en la zona.<br/>Todas las conexiones que produzcan valores idénticos tras la sustitución<br/>se agrupan juntas.<br/>Si la sustitución produce un valor vacío, las métricas no se actualizan.   |
|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| zone             | El nombre de la zona de memoria compartida.                                                                                                                                                                                                                                   |
| count (opcional) | El número máximo de grupos separados para recopilar métricas.<br/>Si los nuevos valores de key superan este límite,<br/>se agrupan bajo zone.<br/><br/>El valor por defecto es 1.                                                                                             |

En el siguiente ejemplo,
todas las conexiones con el mismo valor `$server_addr`
se agrupan en `host_zone`.
Las métricas se recopilan por separado para cada `$server_addr` único
hasta que el número de grupos de métricas alcanza 10.
Después de eso, cualquier nuevo valor de `$server_addr`
se añadirá al grupo `server_zone`:

```nginx
stream {

    upstream backend {
        server 192.168.0.1:3306;
        server 192.168.0.2:3306;
        # ...
    }

    server {

        listen 3306;
        proxy_pass backend;

        status_zone $server_addr zone=server_zone:10;
    }
}
```

Las métricas resultantes se dividen entre servidores individuales en la salida de la API.

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

<a id="s-stream"></a>

### stream

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `stream` { ... }   |
|--------------------------------------------------------------------------------------------|--------------------|
| Predeterminado                                                                             | —                  |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | main               |

Proporciona el contexto de archivo de configuración en el que se especifican las directivas del servidor *stream*.

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

<a id="s-tcp-nodelay"></a>

### tcp_nodelay

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `tcp_nodelay` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|-------------------------------|
| Predeterminado                                                                             | `tcp_nodelay on;`             |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                |

Habilita o deshabilita el uso de la opción `TCP_NODELAY`.
La opción se habilita tanto para las conexiones de cliente como para las conexiones a servidores *proxied*.

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

<a id="s-variables-hash-bucket-size"></a>

### variables_hash_bucket_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `variables_hash_bucket_size` size;   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | `variables_hash_bucket_size 64;`     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream                               |

Define el tamaño de *bucket* para la tabla *hash* de variables.
Los detalles de la configuración de tablas *hash* se proporcionan en un [documento separado](https://es.angie.software//angie/docs/configuration/configfile.md#configure-hashes).

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

<a id="s-variables-hash-max-size"></a>

### variables_hash_max_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `variables_hash_max_size` size;   |
|--------------------------------------------------------------------------------------------|-----------------------------------|
| Predeterminado                                                                             | `variables_hash_max_size 1024;`   |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream                            |

Define el tamaño máximo de la tabla *hash* de variables.
Los detalles de la configuración de tablas *hash* se proporcionan en un [documento separado](https://es.angie.software//angie/docs/configuration/configfile.md#configure-hashes).

<a id="stream-core-variables"></a>

## Variables integradas

El módulo *core stream* admite las siguientes variables integradas:

<a id="v-s-angie-version"></a>

### `$angie_version`

Versión de Angie

<a id="v-s-binary-remote-addr"></a>

### `$binary_remote_addr`

dirección del cliente en formato binario; la longitud del valor es siempre de 4 bytes para direcciones IPv4 o 16 bytes para direcciones IPv6

<a id="v-s-bytes-received"></a>

### `$bytes_received`

número de bytes recibidos del cliente

<a id="v-s-bytes-sent"></a>

### `$bytes_sent`

número de bytes enviados al cliente

<a id="v-s-connection"></a>

### `$connection`

número de serie de la conexión

<a id="v-s-hostname"></a>

### `$hostname`

nombre de host

<a id="v-s-msec"></a>

### `$msec`

tiempo actual en segundos con resolución de milisegundos

<a id="v-s-nginx-version"></a>

### `$nginx_version`

versión de nginx

<a id="v-s-pid"></a>

### `$pid`

PID del proceso *worker*

<a id="v-s-protocol"></a>

### `$protocol`

protocolo utilizado para comunicarse con el cliente: `TCP` o `UDP`

<a id="v-s-proxy-protocol-addr"></a>

### `$proxy_protocol_addr`

dirección del cliente desde la cabecera del protocolo PROXY.
El protocolo PROXY debe estar habilitado previamente configurando el parámetro proxy_protocol en la directiva [listen](#s-listen).

<a id="v-s-proxy-protocol-port"></a>

### `$proxy_protocol_port`

puerto del cliente desde la cabecera del protocolo PROXY.
El protocolo PROXY debe estar habilitado previamente configurando el parámetro proxy_protocol en la directiva [listen](#s-listen).

<a id="v-s-proxy-protocol-server-addr"></a>

### `$proxy_protocol_server_addr`

dirección del servidor desde la cabecera del protocolo PROXY.
El protocolo PROXY debe estar habilitado previamente configurando el parámetro proxy_protocol en la directiva [listen](#s-listen).

<a id="v-s-proxy-protocol-server-port"></a>

### `$proxy_protocol_server_port`

puerto del servidor desde la cabecera del protocolo PROXY.
El protocolo PROXY debe estar habilitado previamente configurando el parámetro proxy_protocol en la directiva [listen](#s-listen).

<a id="v-s-proxy-protocol-tlv"></a>

### `$proxy_protocol_tlv_<name>`

TLV obtenido de la cabecera del protocolo PROXY. El name puede ser un nombre de tipo TLV o su valor numérico. En este último caso, el valor se especifica en hexadecimal y debe comenzar con 0x:

```none
$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
```

Los TLV de SSL también pueden accederse tanto por nombre de tipo TLV como por valor numérico, ambos deben comenzar con `ssl_`:

```none
$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
```

Los siguientes nombres de tipo TLV son compatibles:

* `alpn (0x01)` - protocolo de capa superior usado sobre la conexión
* `authority (0x02)` - valor del nombre de host proporcionado por el cliente
* `unique_id (0x05)` - identificador único de conexión
* `netns (0x30)` - nombre del namespace
* `ssl (0x20)` - estructura TLV SSL en formato binario

Los siguientes nombres de tipo TLV SSL son compatibles:

* `ssl_version (0x21)` - versión de SSL usada en la conexión del cliente
* `ssl_cn (0x22)` - Common Name del certificado
* `ssl_cipher (0x23)` - nombre del cifrado utilizado
* `ssl_sig_alg (0x24)` - algoritmo usado para firmar el certificado
* `ssl_key_alg (0x25)` - algoritmo de clave pública

También se admite el siguiente nombre de tipo TLV SSL especial:

* `ssl_verify` - resultado de la verificación del certificado del cliente: 0 si el cliente presentó un certificado y fue verificado con éxito, o un valor distinto de cero en caso contrario

El protocolo PROXY debe estar habilitado previamente configurando el parámetro proxy_protocol en la directiva [listen](#s-listen).

<a id="v-s-remote-addr"></a>

### `$remote_addr`

dirección del cliente

<a id="v-s-remote-port"></a>

### `$remote_port`

puerto del cliente

<a id="v-s-server-addr"></a>

### `$server_addr`

dirección del servidor que aceptó la conexión.
Calcular el valor de esta variable normalmente requiere una llamada al sistema. Para evitar esta llamada, las directivas [listen](#s-listen) deben especificar direcciones y usar el parámetro `bind`.

<a id="v-s-server-port"></a>

### `$server_port`

puerto del servidor que aceptó la conexión

<a id="v-s-session-time"></a>

### `$session_time`

duración de la sesión en segundos con resolución de milisegundos

<a id="v-s-status"></a>

### `$status`

estado de la sesión, puede ser uno de los siguientes:

| `200`   | sesión completada con éxito                                                                                                                                                                                  |
|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `400`   | no se pudieron analizar los datos del cliente, por ejemplo, la cabecera del protocolo PROXY                                                                                                                  |
| `403`   | acceso prohibido, por ejemplo, cuando el acceso está limitado para [ciertas direcciones de cliente](https://es.angie.software//angie/docs/configuration/modules/stream/stream_access.md#stream-access)       |
| `500`   | error interno del servidor                                                                                                                                                                                   |
| `502`   | bad gateway, por ejemplo, si no se pudo seleccionar o alcanzar un servidor upstream                                                                                                                          |
| `503`   | servicio no disponible, por ejemplo, cuando el acceso está limitado por el [número de conexiones](https://es.angie.software//angie/docs/configuration/modules/stream/stream_limit_conn.md#stream-limit-conn) |

<a id="v-s-time-iso8601"></a>

### `$time_iso8601`

hora local en formato estándar ISO 8601

<a id="v-s-time-local"></a>

### `$time_local`

hora local en el formato Common Log Format
