Upstream#
Proporciona un contexto para describir grupos de servidores que pueden usarse en la directiva proxy_pass. Describe un grupo de servidores. Los servidores pueden escuchar en diferentes puertos. Además, se pueden mezclar servidores que escuchen en sockets TCP y de dominio UNIX. Ejemplo: De forma predeterminada, las conexiones se distribuyen entre los servidores utilizando un método de balanceo round-robin ponderado. En el ejemplo anterior, cada 7 conexiones se distribuyen de la siguiente forma: 5 conexiones van a backend1.example.com:1935 y una conexión a cada uno de los servidores segundo y tercero. Si ocurre un error durante la comunicación con un servidor, la conexión se pasará al siguiente servidor, y así sucesivamente hasta que se prueben todos los servidores en funcionamiento. Si la comunicación con todos los servidores falla, la conexión se cerrará. Define la dirección y otros parámetros de un servidor. La dirección puede especificarse como un nombre de dominio o una dirección IP con un puerto obligatorio, o como una ruta de socket de dominio UNIX especificada tras el prefijo Se pueden definir los siguientes parámetros: Establece el peso del servidor; por defecto, 1. Limita el número máximo de conexiones activas simultáneas al servidor proxy. El valor por defecto es Aquí, un intento fallido es un error o timeout al establecer una conexión con el servidor. Nota Si una directiva Si un upstream contiene solo un servidor
después de que todas sus directivas Número de intentos por defecto. Desactiva el cómputo de intentos. Por defecto, está configurado en 10 segundos. Nota Si una directiva Si un upstream contiene solo un servidor
después de que todas sus directivas Marca el servidor como servidor de respaldo. Se le pasarán peticiones cuando los servidores principales no estén disponibles. Marca el servidor como no disponible de forma permanente. Marca el servidor como en drenaje; esto significa
que solo recibe peticiones de las sesiones
que fueron vinculadas anteriormente con sticky.
De lo contrario, se comporta de forma similar a Advertencia El parámetro Los parámetros Habilita la monitorización de cambios en la lista de direcciones IP que corresponde a un nombre de dominio, actualizándola sin necesidad de recargar la configuración.
El grupo debe residir en una zona de memoria compartida; además, debe definirse un resolver. Habilita la resolución de registros DNS SRV y establece el nombre del servicio.
Para que este parámetro funcione, también debe especificarse el parámetro resolve, sin especificar el puerto del servidor en el nombre de host. Si no hay puntos en el nombre del servicio,
el nombre se forma de acuerdo con el estándar RFC:
el nombre del servicio se antepone con Angie resuelve los registros SRV
combinando el nombre de servicio normalizado y el nombre de host,
y obteniendo la lista de servidores para la combinación vía DNS,
junto con sus prioridades y pesos. Los registros SRV de máxima prioridad
(los que comparten el valor de prioridad mínima)
se resuelven en servidores principales,
y los demás registros se convierten en servidores de respaldo.
Si se configura El peso es similar al parámetro Este ejemplo buscará el registro Establece el ID del servidor en el grupo. Si el parámetro no se especifica,
el ID se establece como un hash MD5 hexadecimal
de la dirección IP y el puerto o de la ruta del socket de dominio UNIX. Establece el tiempo que tarda un servidor en recuperar su peso
al volver a estar en servicio
con los métodos de balanceo de carga round-robin o least_conn. Si el parámetro está configurado
y un servidor vuelve a considerarse saludable
tras un fallo según max_fails y upstream_probe (PRO),
el servidor recupera gradualmente su peso designado
durante el período de tiempo especificado. Si el parámetro no está configurado,
en una situación similar
el servidor comienza a trabajar inmediatamente con su peso designado. Nota Si solo se especifica un Especifica el archivo donde se almacena de forma persistente la lista de servidores del upstream.
Al instalar desde
nuestros paquetes,
se crea un directorio dedicado
El formato de la lista de servidores aquí es similar a Advertencia Para usar la directiva Define el nombre y tamaño de la zona de memoria compartida que almacena la configuración y el estado en tiempo de ejecución del grupo, compartido entre los procesos worker. Varios grupos pueden usar la misma zona. En este caso, basta con especificar el tamaño una sola vez. La directiva habilita la capacidad de iniciar la selección de servidores no desde el grupo principal,
sino desde el grupo activo, es decir, aquel en el que previamente se encontró un servidor con éxito.
Si no se puede encontrar un servidor en el grupo activo para la siguiente petición,
y la búsqueda se traslada al grupo de respaldo,
este grupo de respaldo se convierte en activo,
y las siguientes peticiones se dirigen primero a los servidores de este grupo. Si se define el parámetro Ejemplo: Si el balanceador de carga cambia de los servidores principales al grupo de respaldo,
todas las peticiones posteriores son gestionadas por este grupo de respaldo durante 2 minutos.
Tras expirar los 2 minutos, el balanceador vuelve a comprobar los servidores principales
y los hace activos de nuevo si funcionan con normalidad. Predeterminado — upstream Habilita un mecanismo de balanceo de carga basado en retroalimentación para el Se pueden especificar los siguientes parámetros: La variable de la que se toma el valor de retroalimentación.
Debe representar una métrica de rendimiento o salud;
se asume que la proporciona el servidor. El valor se evalúa con cada respuesta del servidor
y se incorpora al promedio móvil
según la configuración de Si se establece el parámetro, el valor de retroalimentación se interpreta de forma inversa:
valores más bajos indican mejor rendimiento. El factor por el cual se pondera el valor de retroalimentación
al calcular el promedio.
Valores válidos son enteros de 0 a 99.
El valor por defecto es El promedio se calcula usando la fórmula de suavizado exponencial. Cuanto mayor sea el factor, menos afectarán los valores nuevos al promedio;
si se especifica Especifica una variable de condición
que controla cómo se contabilizan las conexiones en el cálculo.
El valor promedio se actualiza con el valor de retroalimentación
solo si la variable de condición
no es igual a Nota Por defecto, el tráfico de las sondas
no se incluye en el cálculo;
combinar la variable $upstream_probe
con Ejemplo: Esta configuración clasifica los servidores por niveles de retroalimentación
basados en los protocolos usados en sesiones individuales,
y además añade una condición sobre $upstream_probe
para contabilizar solo las sondas de Especifica un método de balanceo de carga para el grupo donde la asignación cliente-servidor se determina usando un valor hash de la clave. La clave puede contener texto, variables y sus combinaciones. Tenga en cuenta que cualquier adición o eliminación de servidores del grupo puede resultar en la reasignación de la mayoría de las claves a diferentes servidores. El método es compatible con la librería Perl Cache::Memcached. Ejemplo de uso: Al usar nombres de dominio que se resuelven en múltiples direcciones IP
(por ejemplo, con el parámetro Si se especifica el parámetro Especifica un método de balanceo de carga para el grupo donde una conexión se pasa al servidor con el menor número de conexiones activas, teniendo en cuenta los pesos de los servidores. Si varios servidores son adecuados, se seleccionan cíclicamente (round-robin) con sus pesos tenidos en cuenta. Predeterminado — upstream Especifica un método de balanceo de carga para el grupo donde la probabilidad de pasar
una conexión a un servidor activo es inversamente proporcional a su tiempo promedio
de respuesta; cuanto menor sea, más conexiones recibirá el servidor. La directiva tiene en cuenta el tiempo promedio para establecer una conexión. La directiva usa el tiempo promedio para recibir el primer byte de la respuesta. La directiva usa el tiempo promedio para recibir la respuesta completa. Realiza la misma función que response_time_factor (PRO),
y lo anula si se especifica el parámetro. Especifica una variable de condición
que controla qué conexiones se contabilizan en el cálculo.
El valor promedio se actualiza
solo si la variable de condición de la conexión
no es igual a Nota Por defecto, las sondas
no se incluyen en el cálculo;
combinar la variable $upstream_probe
con Los valores actuales se presentan como Especifica un método de balanceo de carga para el grupo donde una conexión se pasa a un servidor seleccionado aleatoriamente, teniendo en cuenta los pesos de los servidores. Si se especifica el parámetro opcional Especifica para el método de balanceo de carga least_time (PRO) el factor
de suavizado para el valor anterior al calcular el tiempo promedio de respuesta usando la
fórmula de media móvil ponderada exponencialmente. Cuanto mayor sea el número especificado, menos afectarán los valores nuevos al promedio; si
se especifica Los resultados actuales del cálculo se presentan como Nota Solo se consideran las respuestas exitosas en el cálculo;
lo que constituye una respuesta no exitosa
se determina por las directivas proxy_next_upstream. Predeterminado — upstream Configura sesiones persistentes entre clientes y servidores upstream,
dependiendo del modo especificado en el primer parámetro.
Para retirar gradualmente servidores con Advertencia La directiva Este modo utiliza identificadores de ruta predefinidos
que pueden estar integrados en propiedades de conexión accesibles para Angie.
Es menos flexible ya que depende de valores predefinidos,
pero es más adecuado si dichos identificadores ya están en uso. Aquí, al establecer una conexión, el servidor upstream
puede asignar una ruta al cliente y devolver su identificador de una manera
conocida por ambas partes.
El identificador de ruta
debe usar el valor del parámetro sid
de la directiva server.
Tenga en cuenta que el parámetro se hashea adicionalmente
si se especifica la directiva sticky_secret. Las conexiones posteriores de clientes que deseen usar esta ruta
deben contener el identificador emitido por el servidor, de tal manera
que termine en variables de Angie. Los parámetros de la directiva especifican variables para el enrutamiento.
Para seleccionar el servidor al que se dirige la conexión entrante,
se usa la primera variable no vacía;
luego se compara con el parámetro sid
de la directiva server.
Si la selección del servidor falla
o el servidor seleccionado no puede aceptar la conexión,
se seleccionará otro servidor
según el método de balanceo de carga configurado. Aquí Angie busca el identificador de ruta en la variable En este modo, se usa una clave generada dinámicamente
para vincular un cliente a un servidor upstream específico;
este modo es más flexible
ya que asigna servidores sobre la marcha,
almacena sesiones en una zona de memoria compartida,
y admite varias formas de pasar identificadores de sesión. Aquí, se crea una sesión
basándose en propiedades de conexión provenientes del servidor upstream.
Los parámetros El identificador de sesión es el valor de la primera variable no vacía
especificada con Las sesiones se almacenan en una zona de memoria compartida;
su nombre y tamaño se especifican mediante el parámetro Por defecto, Angie extiende el tiempo de vida de la sesión
actualizando la marca de tiempo del último acceso cada vez que se usa.
El parámetro Las conexiones posteriores de clientes que deseen usar una sesión
deben contener su identificador.
El parámetro El parámetro En el ejemplo, Angie crea y busca sesiones
usando la variable $rdp_cookie: Los parámetros A diferencia del modo El parámetro El principio general de funcionamiento de este modo es el siguiente:
si no se encuentra un identificador de sesión localmente,
Angie envía una subpetición síncrona a un almacén remoto
especificado por el parámetro Cuando llega una nueva conexión, Angie realiza las siguientes acciones: Primero, el identificador de sesión se extrae de la primera variable no vacía
en la lista Luego Angie envía una subpetición HTTP síncrona al almacén remoto
especificado por el parámetro el identificador de sesión del parámetro el identificador del servidor preseleccionado:
el valor del parámetro Las variables El almacén remoto procesa la solicitud y devuelve una respuesta HTTP: Una respuesta con código 200, 201 o 204 confirma el servidor seleccionado.
El almacén remoto puede simultáneamente
devolver un identificador de servidor alternativo en una cabecera HTTP;
puede extraerse mediante Al recibir cualquier otro código HTTP del almacén
(incluyendo errores de red y tiempos de espera)
o un identificador de servidor inexistente,
Angie usa el servidor originalmente seleccionado. El identificador del servidor se extrae de la respuesta del almacén remoto
mediante el parámetro A continuación se muestra un ejemplo de configuración simplificado.
El almacén remoto devuelve el identificador del servidor en la cabecera Aquí, con la siguiente respuesta del almacén remoto: Dos variables quedan disponibles: Dado que la variable La directiva Los servidores marcados como Los servidores que han alcanzado el número máximo de conexiones
(al usar Los servidores con la opción Si un servidor previamente no disponible se recupera,
El comportamiento de Las zonas de memoria compartida
especificadas en el parámetro Añade cadena como sal a la función hash MD5
para la directiva sticky en modo La sal se añade después del valor hasheado;
para verificar independientemente el mecanismo de hashing: Cuando está habilitado, Angie devuelve un error de conexión al cliente
si el servidor deseado no está disponible,
en lugar de recurrir a otro servidor disponible,
que es el comportamiento predeterminado cuando no se encuentra un servidor coincidente. El módulo Se usa con Se usa con almacena la dirección IP y el puerto, o la ruta al socket de dominio UNIX del servidor upstream. Si se contactaron varios servidores durante el proxying, sus direcciones se separan por comas, por ejemplo: 192.168.1.1:1935, 192.168.1.2:1935, unix:/tmp/sock Si no se puede seleccionar un servidor, la variable conserva el nombre del grupo de servidores. número de bytes recibidos desde un servidor upstream. Los valores de varias conexiones se separan por comas y dos puntos como las direcciones en la variable $upstream_addr. número de bytes enviados a un servidor upstream. Los valores de varias conexiones se separan por comas y dos puntos como las direcciones en la variable $upstream_addr. tiempo para conectarse al servidor upstream; el tiempo se mantiene en segundos con resolución de milisegundos. Los tiempos de varias conexiones se separan por comas y dos puntos como las direcciones en la variable $upstream_addr. tiempo para recibir el primer byte de datos; el tiempo se mantiene en segundos con resolución de milisegundos. Los tiempos de varias conexiones se separan por comas como las direcciones en la variable $upstream_addr. duración de la sesión en segundos con resolución de milisegundos. Los tiempos de varias conexiones se separan por comas como las direcciones en la variable $upstream_addr. Estado de las conexiones sticky. Conexión dirigida a un grupo de servidores donde sticky no está habilitado. Conexión que no contiene información sticky. Conexión con información sticky dirigida al servidor deseado. Conexión con información sticky dirigida a un servidor
seleccionado por el algoritmo de balanceo de carga. Los valores de múltiples conexiones se separan por comas y dos puntos,
de manera similar a las direcciones en la variable $upstream_addr.Ejemplo de configuración#
upstream backend {
hash $remote_addr consistent;
zone backend 1m;
server backend1.example.com:1935 weight=5;
server unix:/tmp/backend3;
server backend3.example.com service=_example._tcp resolve;
server backup1.example.com:1935 backup;
server backup2.example.com:1935 backup;
}
resolver 127.0.0.53 status_zone=resolver;
server {
listen 1936;
proxy_pass backend;
}
Directivas#
upstream#
upstream backend {
server backend1.example.com:1935 weight=5;
server 127.0.0.1:1935 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend2;
server backend3.example.com:1935 resolve;
server backup1.example.com:1935 backup;
}
server#
unix:. Un nombre de dominio que resuelva en varias direcciones IP define múltiples servidores a la vez.weight=númeromax_conns=número0, lo que significa que no hay límite. Si el grupo de servidores no reside en la memoria compartida, la limitación funciona por cada proceso worker.max_fails=número — establece el número de intentos fallidos
de comunicación con el servidor
que deben ocurrir en el período definido por fail_timeout
para considerar al servidor como no disponible;
luego se reintenta tras el mismo período.server en un grupo resuelve en varios servidores,
su configuración max_fails se aplica a cada servidor individualmente.server se resuelvan,
la configuración max_fails no tiene efecto y será ignorada.max_fails=1max_fails=0fail_timeout=tiempo — establece el período de tiempo durante el cual debe ocurrir un número especificado de intentos fallidos de comunicación con el servidor (max_fails) para considerarlo no disponible.
El servidor permanece no disponible durante la misma cantidad de tiempo antes de que se vuelva a intentar.server en un grupo resuelve en varios servidores,
su configuración fail_timeout se aplica a cada servidor individualmente.server se resuelvan,
la configuración fail_timeout no tiene efecto y será ignorada.backupdowndrain (PRO)down.backup no puede usarse junto con los métodos de balanceo de carga hash y random.down y drain son mutuamente excluyentes.resolveservice=nombre_,
luego se añade _tcp tras un punto.
Así, el nombre de servicio http resultará en _http._tcp.backup con server,
los registros SRV de máxima prioridad se resuelven como servidores de respaldo,
y los demás registros se ignoran.weight de la directiva server.
Si el peso está configurado tanto en la directiva como en el registro SRV,
se usa el peso definido en la directiva._http._tcp.backend.example.com:server backend.example.com service=http resolve;
sid=idslow_start=tiemposerver en el upstream,
slow_start no tiene efecto y será ignorado.state (PRO)#
/var/lib/angie/state/ (/var/db/angie/state/ en FreeBSD)
con los permisos adecuados para almacenar dichos archivos,
por lo que solo es necesario añadir el nombre de archivo en la configuración:upstream backend {
zone backend 1m;
state /var/lib/angie/state/<NOMBRE DE ARCHIVO>;
}
s_server.
El contenido del archivo cambia siempre que los servidores se modifiquen en la
sección /config/stream/upstreams/
mediante la API de configuración.
El archivo se lee al iniciar Angie o al recargar la configuración.state en un bloque upstream,
no debe haber directivas server en él,
pero se requiere una zona de memoria compartida (zone).zone#
backup_switch (PRO)#
permanent sin un valor de tiempo,
el grupo permanece activo tras la selección,
y no se produce la re-comprobación automática de grupos con niveles de prioridad más bajos.
Si se especifica tiempo,
el estado activo del grupo expira tras el intervalo definido,
y el balanceador de carga vuelve a comprobar los grupos con niveles de prioridad más bajos,
retornando a ellos si los servidores funcionan normalmente.upstream media_backend {
server primary1.example.com:1935;
server primary2.example.com:1935;
server reserve1.example.com:1935 backup;
server reserve2.example.com:1935 backup;
backup_switch permanent=2m;
}
feedback (PRO)#
feedback variable [inverse] [factor=número] [account=variable_condición];upstream.
Ajusta dinámicamente las decisiones de balanceo de carga
multiplicando el peso de cada servidor proxy por el valor promedio de retroalimentación,
que cambia con el tiempo según el valor de variable
y está sujeto a una condición opcional.variableinverse y factor.inversefactor90.90, se tomará el 90% del valor anterior
y solo el 10% del valor nuevo.account"" ni a "0".account permite incluirlas
o incluso excluir todo lo demás.upstream backend {
zone backend 1m;
feedback $feedback_value factor=80 account=$condition_value;
server backend1.example.com:1935 weight=1;
server backend2.example.com:1935 weight=2;
}
map $protocol $feedback_value {
"TCP" 100;
"UDP" 75;
default 10;
}
map $upstream_probe $condition_value {
"high_priority" "1";
"low_priority" "0";
default "1";
}
high_priority
o las sesiones de clientes normales.hash#
hash $remote_addr;
resolve),
el servidor no ordena las direcciones recibidas, por lo que su orden puede diferir
entre diferentes servidores, lo que afecta a la distribución de clientes.
Para garantizar una distribución consistente,
use el parámetro consistent.consistent, se usará el método de hash consistente ketama en lugar del método anterior. Este método garantiza que, al añadir o eliminar un servidor del grupo, solo un número mínimo de claves se reasignará a otros servidores. Usar el método para servidores de caché proporciona una mayor tasa de aciertos de caché. El método es compatible con la librería Perl Cache::Memcached::Fast con el parámetro ketama_points configurado en 160.least_conn#
least_time (PRO)#
least_time connect | first_byte | last_byte [factor=número] [account=variable_condición];connectfirst_bytelast_bytefactoraccount"" ni a "0".account permite incluirlas
o incluso excluir todo lo demás.connect_time, first_byte_time
y last_byte_time en el objeto health del servidor
entre las métricas de upstream en la API.random#
two, Angie selecciona aleatoriamente dos servidores y luego elige un servidor usando el método especificado. El método predeterminado es least_conn, que pasa la conexión al servidor con el menor número de conexiones activas.response_time_factor (PRO)#
90, se tomará el 90% del valor anterior y solo el 10% del
valor nuevo. Los valores válidos son de 0 a 99 inclusive.connect_time (tiempo
para establecer una conexión), first_byte_time (tiempo para recibir el primer
byte de la respuesta) y last_byte_time (tiempo para recibir la respuesta completa) en
el objeto health del servidor entre las métricas de upstream en la API.sticky#
sticky route $variable...;sticky learn zone=zona create=$var_create1... lookup=$var_lookup1... [connect] [norefresh] [timeout=tiempo];sticky learn lookup=$var_lookup1... remote_action=uri remote_result=$var_remoto [remote_uri=uri];sticky de la rotación,
puede usarse la opción drain (PRO) en el bloque server.sticky debe aparecer después de todas las directivas de método de balanceo de carga,
de lo contrario no funcionará.$route,
que recibe su valor basándose en $ssl_preread_server_name
(tenga en cuenta que ssl_preread debe estar habilitado):stream {
map $ssl_preread_server_name $route {
a.example.com a;
b.example.com b;
default "";
}
upstream backend {
server 127.0.0.1:8081 sid=a;
server 127.0.0.1:8082 sid=b;
sticky route $route;
}
server {
listen 127.0.0.1:8080;
ssl_preread on;
proxy_pass backend;
}
}
create y lookup listan variables
que especifican cómo se crean nuevas sesiones y se encuentran las existentes.
Ambos parámetros pueden usarse múltiples veces.create;
por ejemplo, esto podría ser
el nombre del servidor upstream.zone.
Si no se ha accedido a una sesión dentro del tiempo
especificado por timeout, se elimina.
El valor predeterminado es 1 hora.norefresh cambia este comportamiento:
la sesión expira estrictamente por tiempo de espera, incluso si se está usando.lookup busca el identificador de sesión en la conexión
usando la lista especificada de variables,
deteniéndose en la primera no vacía.
Si no se encuentra nada, la solicitud se considera nueva.
El valor del identificador encontrado
se compara con las sesiones en memoria compartida.
Si la selección del servidor falla
o el servidor seleccionado no puede manejar la conexión,
se seleccionará otro servidor
según el método de balanceo de carga configurado.connect permite crear una sesión
inmediatamente después de establecer una conexión con el servidor upstream.
Sin él, la sesión se crea solo después de que se completa el procesamiento de la conexión.
(En el caso de conexiones UDP, las sesiones se crean inmediatamente después de la selección del servidor.)stream {
upstream backend {
server 127.0.0.1:3390;
server 127.0.0.1:3391;
sticky learn lookup=$rdp_cookie create=$rdp_cookie zone=sessions:1m;
}
server {
listen 127.0.0.1:3389;
rdp_preread on;
proxy_pass backend;
}
}
remote_action y remote_result
permiten asignar y gestionar identificadores de sesión dinámicamente
usando un almacén de sesiones remoto.learn con zone,
este modo no almacena sesiones en caché localmente
y consulta el almacén remoto para cada conexión.remote_action debe apuntar a un location
en el contexto client.
El parámetro remote_uri especifica el URI de la solicitud HTTP del cliente
al location especificado.
Por defecto, es /.
El valor de remote_uri puede contener variables.remote_action.lookup.
Si todas las variables están vacías,
se usa el algoritmo de balanceo de carga normal sin sesiones persistentes.remote_action, que debe contener
en un formato entendido por el almacén:lookup
(en la configuración, esta es la
variable $sticky_sessid);sid= de la directiva server,
si se especifica,
o el hash MD5 del nombre del servidor
(en la configuración, esta es la
variable $sticky_sid).$sticky_sessid y $sticky_sid se exportan automáticamente
al contexto HTTP con el prefijo stream_:
$stream_sticky_sessid, $stream_sticky_sid.
Esto permite usarlas directamente en directivas HTTP,
por ejemplo mediante cabeceras HTTP usando proxy_set_header.remote_result.remote_result:
puede especificar variables
con el prefijo upstream_http_,
que son creadas automáticamente por Angie para acceder
a las cabeceras de respuesta HTTP del almacén remoto.
Por ejemplo, la cabecera X-Sid: server1 en dicha respuesta
se vuelve accesible en la variable $upstream_http_x_sid
con el valor server1.X-Sticky-Sid
y así confirma o anula la selección de Angie:http {
client {
location @sticky_client1 {
# usar variables del upstream de stream;
# las añade al contexto HTTP con el prefijo stream_*
proxy_set_header X-Sticky-Sessid $stream_sticky_sessid;
proxy_set_header X-Sticky-Sid $stream_sticky_sid;
proxy_set_header X-Sticky-Last $msec;
proxy_pass http://127.0.0.1:8080;
proxy_cache remote;
proxy_cache_valid 200 1d;
proxy_cache_key $scheme$proxy_host$request_uri$stream_sticky_sessid;
}
}
}
stream {
upstream u {
server 127.0.0.1:8081 sid=backend-01;
server 127.0.0.1:8082 sid=backend-02;
sticky learn lookup=$remote_addr # variable de stream
remote_action=@sticky_client1 # location del bloque client
remote_result=$upstream_http_x_sticky_sid # variable HTTP
remote_uri=/foo; # por defecto es /
}
server {
listen 127.0.0.1:8080;
proxy_pass u;
}
}
HTTP/1.1 200 OK
...
X-Sticky-Sid: backend-01
X-Session-Info: active
$upstream_http_x_sticky_sid,
con el valor backend-01;$upstream_http_x_session_info,
con el valor active.$upstream_http_x_sticky_sid
se especifica en el parámetro remote_result,
su valor se usará
para seleccionar el servidor con sid=backend-01.sticky tiene en cuenta el estado de los servidores en upstream:down o temporalmente no disponibles debido a fallos
se excluyen de la selección.max_conns) se omiten temporalmente.drain (PRO)
pueden ser seleccionados para crear nuevas sesiones en modo sticky
cuando los identificadores coinciden.sticky reanuda automáticamente su uso.sticky puede configurarse adicionalmente
con las directivas sticky_secret y sticky_strict.
Si sticky no logra seleccionar un servidor o no está disponible,
la solicitud se manejará según el método de balanceo de carga seleccionado,
a menos que la directiva sticky_strict esté habilitada.
En modo sticky_strict on;, la solicitud se rechaza con un error.zone de la directiva sticky
no pueden compartirse entre diferentes grupos upstream;
cada grupo debe usar su propia zona.sticky_secret#
route.
Cadena puede contener variables, por ejemplo $remote_addr:upstream backend {
server 127.0.0.1:8081 sid=a;
server 127.0.0.1:8082 sid=b;
sticky route $route;
sticky_secret my_secret.$remote_addr;
}
$ echo -n "<VALOR><SAL>" | md5sum
sticky_strict#
Variables integradas#
stream_upstream admite las siguientes variables integradas:$sticky_sessid#remote_action en sticky;
almacena el identificador de sesión inicial tomado de lookup.$sticky_sid#remote_action en sticky;
almacena el identificador del servidor previamente asociado con la sesión.sticky_sid contiene el valor del parámetro sid=
de la directiva server en el bloque upstream, si se especifica,
o el hash MD5 del nombre del servidor.$upstream_addr#$upstream_bytes_received#$upstream_bytes_sent#$upstream_connect_time#$upstream_first_byte_time#$upstream_session_time#$upstream_sticky_status#""NEWHITMISS