Upstream#
Proporciona un contexto para describir grupos de servidores que pueden utilizarse en las directivas proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass y grpc_pass. Added in version 1.9.0: PRO 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 donde se encontró un servidor con éxito la última vez.
Si no se puede encontrar un servidor en el grupo activo para la siguiente solicitud,
y la búsqueda se mueve al grupo de respaldo,
entonces este grupo se convierte en activo,
y las solicitudes posteriores se dirigen primero a los servidores de este grupo. Si el parámetro Ejemplo: Si el balanceador cambia de los servidores principales al grupo de respaldo,
todas las solicitudes posteriores son manejadas por este grupo de respaldo durante 2 minutos.
Después de que transcurran 2 minutos, el balanceador vuelve a verificar los servidores principales
y los hace activos nuevamente si están funcionando normalmente. Permite vincular una conexión de servidor a una conexión de cliente cuando el
value, especificado como una cadena de variables, se vuelve diferente de Advertencia La directiva Advertencia Al usar la directiva, la configuración del módulo Proxy
debe permitir el uso de conexiones persistentes, por ejemplo: Un caso de uso típico para la directiva es el proxy de conexiones con
autenticación NTLM, donde es necesario asegurar la vinculación cliente-servidor al
inicio de la negociación: Added in version 1.6.0: PRO Predeterminado — upstream Configura un mecanismo de balanceo de carga basado en retroalimentación en 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 el servidor la proporciona en cabeceras o de otra manera. El valor se evalúa con cada respuesta del servidor
y se incorpora al promedio móvil
según los ajustes de Si se establece este parámetro, el valor de retroalimentación se interpreta de manera inversa:
valores más bajos indican mejor rendimiento. El factor por el cual se considera el valor de retroalimentación
al calcular el promedio.
Los valores válidos son enteros de 0 a 99.
El valor predeterminado es El promedio se calcula utilizando la fórmula de suavizado exponencial. Cuanto mayor sea el factor, menos afectan los nuevos valores al promedio;
si se especifica Especifica una variable de condición
que controla qué respuestas se consideran en el cálculo.
El valor promedio se actualiza con el valor de retroalimentación de la respuesta
solo si la variable de condición de esa respuesta
no es igual a Nota Por defecto, las respuestas durante las comprobaciones activas
no se incluyen en el cálculo;
combinar la variable $upstream_probe
con Permite procesar datos del servidor proxy después de recibir
la respuesta completa, no solo la cabecera. Ejemplo: Esta configuración categoriza las respuestas del servidor por niveles de retroalimentación
basados en puntuaciones específicas de los campos de cabecera de respuesta,
y también añade una condición en $upstream_probe
para considerar solo las respuestas de la comprobación activa Especifica un método de balanceo de carga para un grupo de servidores donde la asignación cliente-servidor se basa en el valor hash de la clave. La clave puede contener texto, variables y sus combinaciones. Tenga en cuenta que añadir o eliminar un servidor 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 biblioteca Perl Cache::Memcached. Si se especifica el parámetro Especifica un método de balanceo de carga para el grupo donde las solicitudes se distribuyen entre servidores basándose en las direcciones IP de los clientes. Se utilizan los primeros tres octetos de la dirección IPv4 o la dirección IPv6 completa como clave de hash. El método garantiza que las solicitudes del mismo cliente siempre se pasarán al mismo servidor, excepto cuando este servidor se considere no disponible. En este caso, las solicitudes del cliente se pasarán a otro servidor, que probablemente también será el mismo servidor para ese cliente. Si uno de los servidores necesita ser eliminado temporalmente, debe marcarse con el parámetro Activa la caché para conexiones a servidores upstream. El parámetro Nota Cabe destacar especialmente que la directiva keepalive no limita el número total de conexiones a servidores upstream que un proceso worker de Angie puede abrir. El parámetro Advertencia La directiva Ejemplo de configuración de un upstream de memcached con conexiones keepalive: Para HTTP, la directiva proxy_http_version debe establecerse a "1.1" y el campo de cabecera Nota Alternativamente, se pueden usar conexiones persistentes HTTP/1.0 pasando el campo de cabecera "Connection: Keep-Alive" a un servidor upstream, aunque este método no es recomendado. Para FastCGI, es necesario establecer fastcgi_keep_conn para que funcionen las conexiones keepalive: Nota Los protocolos SCGI y uwsgi no definen una semántica para conexiones keepalive. Establece el número máximo de peticiones que pueden ser servidas a través de una conexión keepalive. Después de alcanzar el número máximo de peticiones, la conexión se cierra. Cerrar conexiones periódicamente es necesario para liberar las asignaciones de memoria por conexión. Por lo tanto, usar un número máximo de peticiones demasiado alto podría resultar en un uso excesivo de memoria y no es recomendable. Limita el tiempo máximo durante el cual las peticiones pueden ser procesadas a través de una conexión keepalive. Después de alcanzar este tiempo, la conexión se cierra tras el procesamiento de la petición subsiguiente. Establece un tiempo de espera durante el cual una conexión keepalive inactiva a un servidor upstream permanecerá abierta. Especifica que un grupo debe usar un método de balanceo de carga donde una petición se pasa al servidor con el menor número de conexiones activas, teniendo en cuenta los pesos de los servidores. Si hay varios servidores de este tipo, se prueban por turnos utilizando un método de balanceo round-robin ponderado. Predeterminado — upstream Especifica que el grupo debe usar un método de balanceo de carga donde la probabilidad de que un servidor activo reciba la petición es inversamente proporcional a su tiempo medio de respuesta; cuanto menor sea, más peticiones recibe un servidor. La directiva tiene en cuenta el tiempo medio para recibir las cabeceras de respuesta. La directiva utiliza el tiempo medio para recibir la respuesta completa. Added in version 1.7.0: PRO La directiva tiene en cuenta el tiempo promedio para recibir los encabezados de respuesta. La directiva utiliza el tiempo promedio para recibir la respuesta completa. Added in version 1.7.0: PRO Sirve para el mismo propósito que response_time_factor (PRO)
y lo anula si el parámetro está establecido. Especifica una variable de condición
que controla qué respuestas se incluyen en el cálculo.
El promedio se actualiza
solo si la variable de condición para la respuesta
no es Nota Por defecto, las respuestas durante comprobaciones de salud activas
no se incluyen en el cálculo;
combinar la variable $upstream_probe
con Los valores actuales se presentan como Added in version 1.4.0: PRO Si no es posible asignar un servidor proxy a una solicitud en el primer intento
(por ejemplo, durante una breve interrupción del servicio
o cuando hay un aumento de carga que alcanza el límite max_conns),
la solicitud no se rechaza;
en su lugar, Angie intenta ponerla en cola para su procesamiento. El parámetro número de la directiva establece el número máximo de solicitudes
en la cola para un proceso de trabajo.
Si la cola está llena,
se devuelve un error Nota La lógica de la directiva proxy_next_upstream también se aplica a las solicitudes en cola.
Específicamente, si se seleccionó un servidor para una solicitud
pero no se puede entregar a él,
la solicitud puede devolverse a la cola. Si no se selecciona un servidor para procesar una solicitud en cola
dentro del tiempo establecido por Advertencia La directiva Especifica un método de balanceo de carga para el grupo donde una solicitud se pasa a un servidor seleccionado aleatoriamente, teniendo en cuenta los pesos de los servidores. Si se especifica el parámetro opcional Establece el factor de suavizado para el valor anterior al calcular el tiempo de respuesta promedio para el método de balanceo de carga least_time (PRO) utilizando la fórmula de media móvil ponderada exponencialmente. Cuanto mayor sea el número especificado, menos afectarán los nuevos valores al promedio; si
se especifica Los resultados de cálculo actuales se presentan como Nota Solo las respuestas exitosas se incluyen en el cálculo; lo que se considera una respuesta
no exitosa está definido por las directivas proxy_next_upstream,
fastcgi_next_upstream, uwsgi_next_upstream,
scgi_next_upstream, memcached_next_upstream, y
grpc_next_upstream. Además, el valor Define la dirección y otros parámetros de un servidor. La dirección puede especificarse como un nombre de dominio o dirección IP, con un puerto opcional, o como una ruta de socket UNIX especificada después del prefijo Los siguientes parámetros pueden definirse: Establece el peso del servidor. El valor predeterminado es 1. Limita el número máximo de conexiones activas simultáneas al servidor proxy. El valor predeterminado es Nota Si las conexiones inactivas keepalive, múltiples procesos de trabajo y la memoria compartida están habilitados, el número total de conexiones activas e inactivas al servidor proxy puede exceder el valor Lo que se considera un
intento fallido está definido por las directivas proxy_next_upstream,
fastcgi_next_upstream, uwsgi_next_upstream,
scgi_next_upstream, memcached_next_upstream, y
grpc_next_upstream. Cuando se alcanza Nota Si una directiva Si un upstream contiene solo un servidor
después de que todas sus directivas el número predeterminado de intentos desactiva el conteo de intentos Por defecto, esto se establece 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 un servidor de respaldo. Recibirá solicitudes cuando los servidores primarios no estén disponibles. Si la directiva backup_switch (PRO) está configurada,
también se aplica su lógica de respaldo activo. marca el servidor como permanentemente no disponible. marca el servidor como drenado; esto significa
que solo recibe solicitudes de las sesiones
que fueron vinculadas anteriormente con sticky.
De lo contrario, se comporta de manera similar a Advertencia El parámetro Los parámetros Added in version 1.1.0. habilita el monitoreo de cambios en la lista de direcciones IP que corresponden
a un nombre de dominio, actualizándola sin recargar la configuración.
El grupo debe almacenarse en una
zona de memoria compartida;
además, necesitas definir un
resolver. habilita la resolución de registros DNS SRV y establece el nombre del servicio.
Para que este parámetro funcione, especifica el parámetro resolve del servidor,
proporcionando un nombre de host sin número de puerto. Si no hay puntos en el nombre del servicio,
el nombre se forma según el estándar RFC:
el nombre del servicio se prefija 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 a través de DNS,
junto con sus prioridades y pesos. Los registros SRV de máxima prioridad
(aquellos que comparten el valor mínimo de prioridad)
se resuelven en servidores primarios,
y otros registros se convierten en servidores de respaldo.
Si El peso es similar al parámetro Este ejemplo buscará el registro Added in version 1.2.0: Angie Added in version 1.1.0-P1: Angie PRO establece el ID del servidor dentro del grupo. Si el parámetro no está establecido,
el ID se establece como el hash MD5 hexadecimal
de la dirección IP y el puerto o la ruta del socket UNIX. Added in version 1.4.0. Establece el tiempo para que un servidor
que vuelve al servicio
recupere su peso
cuando el balanceo de carga utiliza el
método round-robin o least_conn. Si el parámetro está configurado
y el servidor se considera nuevamente saludable
después de un fallo
según lo definido por max_fails y upstream_probe (PRO),
el servidor recuperará gradualmente su peso designado
dentro del período de tiempo especificado. Si el parámetro no está configurado,
en una situación similar
el servidor comenzará inmediatamente a trabajar con su peso designado. Nota Si hay solo un Added in version 1.2.0: PRO Especifica el archivo donde se almacena de forma persistente la lista de servidores del upstream.
Al instalar desde
nuestros paquetes,
se crea un directorio designado
El formato de la lista de servidores aquí es similar a Advertencia Para usar la directiva Added in version 1.2.0: Angie Added in version 1.1.0-P1: Angie PRO Predeterminado — upstream Configura la vinculación de sesiones de cliente a servidores proxy
en el modo especificado por el primer parámetro;
para drenar servidores
que tienen configurada la directiva Advertencia La directiva Este modo utiliza cookies para mantener la persistencia de sesión.
Es más adecuado para situaciones
donde las cookies ya se utilizan para la gestión de sesiones. Aquí, una solicitud de cliente,
que aún no está vinculada a ningún servidor,
se envía a un servidor
elegido según el método de balanceo configurado.
Además, Angie establece una cookie
con un valor único que identifica al servidor. El nombre de la cookie ( Las solicitudes posteriores del cliente que contengan esta cookie
se reenvían al servidor identificado por el valor de la cookie,
que es el servidor con el sid especificado.
Si la selección de un servidor falla
o el servidor elegido no puede manejar la solicitud,
se selecciona otro servidor
según el método de balanceo configurado. La directiva permite asignar atributos a la cookie;
el único atributo establecido por defecto es Aquí,
Angie crea una cookie llamada Este modo utiliza identificadores de ruta predefinidos
que pueden estar integrados en URLs, cookies u otras propiedades de la solicitud.
Es menos flexible porque depende de valores predefinidos
pero puede ser más adecuado si dichos identificadores ya están establecidos. Aquí, cuando un servidor proxy recibe una solicitud,
puede asignar una ruta al cliente y devolver su identificador
de manera que tanto el cliente como el servidor sean conscientes de ello.
El valor del parámetro sid
de la directiva server
debe utilizarse como identificador de ruta.
Tenga en cuenta que el parámetro se cifra adicionalmente
si la directiva sticky_secret está configurada. Las solicitudes posteriores de clientes que deseen utilizar esta ruta
deben contener el identificador emitido por el servidor de una manera
que asegure que termine en variables de Angie, por ejemplo,
en cookie o argumentos de solicitud. La directiva enumera las variables específicas utilizadas para el enrutamiento.
Para seleccionar el servidor al que se reenvía la solicitud entrante,
se utiliza la primera variable no vacía;
luego se compara con el parámetro sid
de la directiva server.
Si la selección de un servidor falla
o el servidor elegido no puede manejar la solicitud,
se selecciona otro servidor
según el método de balanceo configurado. Aquí,
Angie busca el identificador de ruta en la cookie Este modo utiliza una clave generada dinámicamente
para asociar un cliente con un servidor proxy particular;
es más flexible
porque asigna servidores sobre la marcha,
almacena sesiones en una zona de memoria compartida,
y admite diferentes formas de pasar identificadores de sesión. Aquí, se crea una sesión
basada en la respuesta del servidor proxy.
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 establecen mediante el parámetro Por defecto, Angie extiende la duración de la sesión,
actualizando la marca de tiempo del último acceso en cada uso.
El parámetro Las solicitudes posteriores de clientes que deseen utilizar la sesión
deben contener su identificador,
asegurando que termine en una variable no vacía
especificada con El parámetro En el ejemplo, Angie crea una sesión,
estableciendo una cookie llamada Los parámetros El ID de sesión inicial siempre proviene de Si este ID de sesión no se encuentra localmente,
Angie envía una subpetición síncrona al almacenamiento remoto.
El parámetro El almacenamiento acepta el ID de sesión de En el lado de Angie, se proporcionan dos variables especiales para este propósito:
$sticky_sessid y $sticky_sid, respectivamente.
El Una respuesta con código 200, 201 o 204 del almacenamiento remoto
indica que ha aceptado la sesión
y la ha guardado con los valores sugeridos para uso futuro,
o que la sesión ya existe y coincide con la sugerida. Una respuesta 409 del almacenamiento remoto
indica que este ID de sesión ya existe,
pero con un servidor diferente.
En este caso, la respuesta debe contener un ID de sesión alternativo
en una cabecera que Angie puede usar para seleccionar el servidor. Angie extrae este identificador
de la respuesta del almacenamiento remoto utilizando la variable
especificada por el parámetro En el siguiente ejemplo, Angie crea una sesión,
utiliza la variable Cada vez que hay un fallo de registro local o una expiración de tiempo de espera
(considerando El parámetro A continuación se muestra un ejemplo de configuración simplificado.
El almacenamiento remoto devuelve el ID de sesión en la cabecera Con la siguiente respuesta del almacenamiento remoto: Dos variables quedan disponibles: Dado que la variable Added in version 1.2.0: Angie Added in version 1.1.0-P1: Angie PRO Añade el string como valor de sal a la función de hash MD5
para la directiva sticky en los modos La sal se añade al valor que se está hasheando;
para verificar el mecanismo de hash de forma independiente: Added in version 1.2.0: Angie Added in version 1.1.0-P1: Angie PRO Cuando está habilitado, hace que Angie devuelva un error HTTP 502 al cliente
si el servidor deseado no está disponible,
en lugar de usar cualquier otro servidor disponible
como lo haría cuando no hay servidores disponibles en el upstream. Define un grupo de servidores. Los servidores pueden escuchar en diferentes puertos. Además, se pueden mezclar servidores que escuchan en sockets TCP y de dominio UNIX. Ejemplo: Por defecto, las solicitudes se distribuyen entre los servidores utilizando un método de balanceo de carga ponderado round-robin. En el ejemplo anterior, cada 7 solicitudes se distribuirán de la siguiente manera: 5 solicitudes van a backend1.example.com y una solicitud a cada uno de los servidores segundo y tercero. Si ocurre un error durante la comunicación con un servidor, la solicitud se pasará al siguiente servidor, y así sucesivamente hasta que se hayan probado todos los servidores en funcionamiento. Si no se pudo obtener una respuesta exitosa de ninguno de los servidores, el cliente recibirá el resultado de la comunicación con el último servidor. Define el nombre y tamaño de la zona de memoria compartida que mantiene la configuración del grupo y el estado de ejecución que se comparte entre los procesos de trabajo. Varios grupos pueden compartir la misma zona. En este caso, es suficiente especificar el tamaño solo una vez. El módulo Se utiliza con Se utiliza 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 procesamiento de la solicitud, sus direcciones se separan por comas, por ejemplo: 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock Si ocurre una redirección interna de un grupo de servidores a otro, iniciada por 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80 Si no se puede seleccionar un servidor, la variable mantiene el nombre del grupo de servidores. número de bytes recibidos de 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. mantiene el estado de acceso a una caché de respuestas. El estado puede ser
Si la caché se omitió por completo sin acceder a ella,
la variable no se establece. mantiene el tiempo empleado en establecer una conexión con el servidor upstream; el tiempo se mantiene en segundos con resolución de milisegundos. En caso de SSL, incluye el tiempo empleado en el handshake. Los tiempos de varias conexiones se separan por comas y dos puntos como las direcciones en la variable $upstream_addr. mantiene el tiempo empleado en recibir la cabecera de respuesta del servidor upstream; el tiempo se mantiene en segundos con resolución de milisegundos. Los tiempos de varias respuestas se separan por comas y dos puntos como las direcciones en la variable $upstream_addr. mantiene los campos de cabecera de respuesta del servidor. Por ejemplo, el campo de cabecera de respuesta mantiene el tiempo que la solicitud pasó en la cola
antes de que se seleccionara un servidor;
el tiempo se mantiene en segundos con resolución de milisegundos.
Los tiempos de varios intentos de selección se separan por comas y dos puntos,
como las direcciones en la variable $upstream_addr. mantiene la longitud de la respuesta obtenida del servidor upstream; la longitud se mantiene en bytes. Las longitudes de varias respuestas están separadas por comas y dos puntos como las direcciones en la variable $upstream_addr. mantiene el tiempo empleado en recibir la respuesta del servidor upstream; el tiempo se mantiene en segundos con resolución de milisegundos. Los tiempos de varias respuestas están separados por comas y dos puntos como las direcciones en la variable $upstream_addr. mantiene el código de estado de la respuesta obtenida del servidor upstream. Los códigos de estado de varias respuestas están separados por comas y dos puntos como las direcciones en la variable $upstream_addr. Si no se puede seleccionar un servidor, la variable mantiene el código de estado 502 (Bad Gateway). Estado de las peticiones sticky. Petición enviada al upstream sin sticky habilitado. Petición sin información sticky. Petición con información sticky enrutada al servidor deseado. Petición con información sticky enrutada al servidor seleccionado por el
algoritmo de balanceo de carga. Los valores de múltiples conexiones están separados por comas y dos puntos, similar a
las direcciones en la variable $upstream_addr. mantiene los campos del final de la respuesta obtenida del servidor upstream.Ejemplo de configuración#
upstream backend {
zone backend 1m;
server backend1.example.com weight=5;
server backend2.example.com:8080;
server backend3.example.com service=_example._tcp resolve;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
resolver 127.0.0.53 status_zone=resolver;
server {
location / {
proxy_pass http://backend;
}
}
Directivas#
backup_switch (PRO)#
permanent
se define sin un valor time,
el grupo permanece activo después de la selección,
y no se produce una verificación automática de grupos con niveles inferiores.
Si se especifica time,
el estado activo del grupo expira después del intervalo especificado,
y el balanceador vuelve a comprobar los grupos con niveles inferiores,
volviendo a ellos si los servidores funcionan normalmente.upstream my_backend {
server primary1.example.com;
server primary2.example.com;
server backup1.example.com backup;
server backup2.example.com backup;
backup_switch permanent=2m;
}
bind_conn (PRO)#
""
y
"0"
.bind_conn
debe usarse después de todas las directivas
que establecen un método de balanceo de carga,
de lo contrario no funcionará.
Si se usa junto con la directiva sticky,
entonces bind_conn
debe ir después de sticky
.proxy_http_version 1.1;
proxy_set_header Connection "";
map $http_authorization $ntlm {
~*^N(?:TLM|egotiate) 1;
}
upstream ntlm_backend {
server 127.0.0.1:8080;
bind_conn $ntlm;
}
server {
# ...
location / {
proxy_pass http://ntlm_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
# ...
}
}
feedback (PRO)#
feedback
variable [inverse
] [factor=
number] [account=
condition_variable] [last_byte
];upstream
.
Ajusta dinámicamente las decisiones de balanceo
multiplicando el peso de cada servidor proxy por el valor promedio de retroalimentación,
que cambia con el tiempo dependiendo del valor de la variable
y está sujeto a una condición opcional.variable
inverse
y factor
.inverse
factor
90
.90
, entonces se tomará el 90% del valor anterior
y solo el 10% del nuevo valor.account
""
o "0"
.account
permite incluir estas respuestas
o incluso excluir todo lo demás.last_byte
upstream backend {
zone backend 1m;
feedback $feedback_value factor=80 account=$condition_value;
server backend1.example.com;
server backend2.example.com;
}
map $upstream_http_custom_score $feedback_value {
"high" 100;
"medium" 75;
"low" 50;
default 10;
}
map $upstream_probe $condition_value {
"high_priority" "1";
"low_priority" "0";
default "1";
}
high_priority
o las respuestas a solicitudes regulares de clientes.hash#
consistent
, se utilizará el método de hash consistente ketama. Este método garantiza que solo unas pocas claves serán reasignadas a diferentes servidores cuando se añade o elimina un servidor del grupo. Esto ayuda a lograr una mayor tasa de aciertos de caché para los servidores de caché. El método es compatible con la biblioteca Perl Cache::Memcached::Fast con el parámetro ketama_points
establecido en 160.ip_hash#
down
para preservar el hash actual de direcciones IP de clientes:upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
keepalive#
connections
establece el número máximo de conexiones keepalive inactivas a servidores upstream que se conservan en la caché de cada proceso de trabajo. Cuando se excede este número, se cierran las conexiones menos utilizadas recientemente.connections
debe establecerse a un número lo suficientemente pequeño para permitir que los servidores upstream procesen también nuevas conexiones entrantes.keepalive
debe usarse después de todas las directivas que establece el
método de balanceo de carga; de lo contrario, no funcionará.upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
#...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
Connection
debe eliminarse:upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
#...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
# ...
}
}
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 8;
}
server {
#...
location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
# ...
}
}
keepalive_requests#
keepalive_time#
keepalive_timeout#
least_conn#
least_time (PRO)#
least_time
header
| last_byte
[factor=
number] [account=
condition_variable];header
last_byte
header
last_byte
factor
account
""
o "0"
.account
permite incluir estas respuestas
o incluso excluir todo lo demás.header_time
(solo encabezados)
y response_time
(respuestas completas) en el objeto health
del servidor
entre las métricas de upstream en la API.queue (PRO)#
502 (Bad Gateway)
al cliente.timeout
(por defecto es 60 segundos),
se devuelve un error 502 (Bad Gateway)
al cliente.
Las solicitudes de clientes que cierran prematuramente la conexión también se eliminan de la cola;
hay contadores para los estados de las solicitudes que pasan por la cola en la API.queue
debe usarse después de todas las directivas que establecen el
método de balanceo de carga; de lo contrario, no funcionará.random#
two
, Angie selecciona aleatoriamente dos servidores, luego selecciona uno de ellos usando el método least_conn, donde una solicitud se pasa 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
nuevo valor. Los valores permitidos van de 0 a 99, inclusive.header_time
(solo encabezados) y response_time
(respuestas completas) en el objeto health
entre las métricas de upstream en la API.header_time
se recalcula solo si todos los encabezados son recibidos y procesados, y
response_time
se recalcula solo si se recibe la respuesta completa.server#
unix:
. Si no se especifica un puerto, se utiliza el puerto 80. Un nombre de dominio que se resuelve a varias direcciones IP define varios servidores a la vez.weight=
numbermax_conns=
number0
, lo que significa que no hay límite. Si el grupo de servidores no reside en la memoria compartida, la limitación funciona para cada proceso de trabajo.max_conns
.max_fails=
number — establece el número de intentos fallidos
de comunicación con el servidor
que deben ocurrir en la duración establecida por fail_timeout
para considerar que el servidor no está disponible;
luego se reintenta después de la misma duración.max_fails
, el servidor también se considera no saludable por
las sondas upstream_probe (PRO); no recibirá solicitudes de clientes hasta
que las sondas lo consideren saludable nuevamente.server
en un grupo se resuelve en múltiples servidores,
su configuración max_fails
se aplica a cada servidor individualmente.server
son resueltas,
la configuración max_fails
no tiene efecto y será ignorada.max_fails=1
max_fails=0
fail_timeout=
time — establece el período de tiempo durante el cual debe ocurrir
un número específico de intentos fallidos de comunicación con el servidor
(max_fails) para considerar que el servidor no está disponible.
El servidor permanece no disponible durante la misma cantidad de tiempo
antes de que se vuelva a intentar.server
en un grupo se resuelve en múltiples servidores,
su configuración fail_timeout
se aplica a cada servidor individualmente.server
son resueltas,
la configuración fail_timeout
no tiene efecto y será ignorada.backup
down
drain
(PRO)down
.backup
no puede usarse junto con los métodos de balanceo de carga
hash, ip_hash y random.down
y drain
son mutuamente excluyentes.resolve
service=
name_
,
luego se añade _tcp
después de un punto.
Por lo tanto, el nombre de servicio http
resultará en _http._tcp
.backup
se establece con server
,
los registros SRV de máxima prioridad se resuelven en servidores de respaldo,
y otros registros son ignorados.weight
de la directiva server
.
Si el peso se establece tanto por la directiva como por el registro SRV,
se utiliza el peso establecido por la directiva._http._tcp.backend.example.com
:server backend.example.com service=http resolve;
sid=
idslow_start=
timeserver
en un upstream,
slow_start
no tiene efecto y será ignorado.state (PRO)#
/var/lib/angie/state/
(/var/db/angie/state/
en FreeBSD)
con los permisos apropiados
para almacenar estos archivos,
por lo que solo necesita añadir el nombre del archivo en la configuración:upstream backend {
zone backend 1m;
state /var/lib/angie/state/<NOMBRE DEL ARCHIVO>;
}
server
.
El contenido del archivo cambia cada vez que se modifican los servidores en la
sección /config/http/upstreams/
a través de 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).sticky#
sticky
cookie name [attr=value]...;sticky route
$variable...;sticky learn
zone=
zone create=
$create_var1... lookup=
$lookup_var1... [header
] [norefresh
] [timeout=
time];sticky learn
[zone=
zone] lookup=
$lookup_var1... remote_action=
uri remote_result=
$remote_var [norefresh
] [timeout=
time];sticky
,
puede usar la opción drain
(PRO) en el bloque server.sticky
debe usarse después de todas las directivas
que establecen un método de balanceo de carga;
de lo contrario, no funcionará.
Si se usa junto con la directiva bind_conn (PRO),
bind_conn
debe aparecer después de sticky
.name
) se establece mediante la directiva sticky
,
y el valor (value
) corresponde
al parámetro sid
de la directiva server.
Tenga en cuenta que el parámetro se cifra adicionalmente
si la directiva sticky_secret está configurada.path=/
.
Los valores de los atributos se especifican como cadenas con variables.
Para eliminar un atributo, establezca un valor vacío para él: attr=
.
Así, sticky cookie path=
crea una cookie sin path
.srv_id
con una duración de una hora
y un dominio especificado por variable:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky cookie srv_id domain=$my_domain max-age=3600;
}
route
,
y luego en el argumento de solicitud route
:upstream backend {
server backend1.example.com:8080 "sid=server 1";
server backend2.example.com:8080 "sid=server 2";
sticky route $cookie_route $arg_route;
}
create
y lookup
enumeran variables
que indican cómo se crean nuevas sesiones
y cómo se buscan las sesiones existentes.
Ambos parámetros pueden aparecer varias veces.create
;
por ejemplo, podría ser una
cookie del servidor proxy.zone
.
Si una sesión ha estado inactiva durante el tiempo establecido por timeout
,
se elimina.
El valor predeterminado es 10 minutos.norefresh
desactiva este comportamiento:
la sesión caducará estrictamente por tiempo de espera, incluso si continúa siendo utilizada.
Este modo es útil
cuando se requiere la terminación forzada de la sesión después de un período de tiempo,
por ejemplo, al integrarse con gestores de sesiones externos.lookup
;
su valor se comparará con las sesiones en la memoria compartida.
Si la selección de un servidor falla
o el servidor elegido no puede manejar la solicitud,
se selecciona otro servidor
según el método de balanceo configurado.header
permite crear una sesión
inmediatamente después de recibir las cabeceras de respuesta del servidor proxy.
Sin él, la sesión se crea solo después de que se complete el procesamiento de la solicitud.examplecookie
en la respuesta:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky learn
create=$upstream_cookie_examplecookie
lookup=$cookie_examplecookie
zone=client_sessions:1m;
}
remote_action
y remote_result
permiten asignar y gestionar dinámicamente los ID de sesión
a través de almacenamiento remoto de sesiones.
Aquí, la zona de memoria compartida actúa como una caché local,
mientras que el almacenamiento remoto es la fuente autoritativa.
Por lo tanto, el parámetro create
es incompatible con remote_action
porque los ID de sesión deben crearse de forma remota.
Si una sesión ha estado inactiva durante el tiempo establecido por timeout
,
se elimina.
La configuración remote_action
no afecta al tiempo de espera.
El valor predeterminado es de 10 minutos.lookup
;
si se puede encontrar en la memoria compartida local,
Angie procede a seleccionar el servidor apropiado.remote_action
establece el URI del almacenamiento remoto,
que debe manejar la búsqueda y creación de sesiones de la siguiente manera:lookup
y el ID de servidor sugerido localmente asociado con esta sesión
a través de cabeceras personalizadas o de alguna otra manera.sticky_sid
contiene el valor del parámetro sid=
de la directiva server
en el bloque upstream, si está establecido,
o un hash MD5 del nombre del servidor.remote_result
(por ejemplo, $upstream_http_x_sticky_sid
).
El parámetro remote_result
utiliza variables
con el prefijo upstream_http_
,
que proporcionan acceso dinámico
a las cabeceras de respuesta HTTP del almacenamiento remoto.
Por ejemplo, la cabecera X-Sid: server1
se vuelve disponible en la variable $upstream_http_x_sid
con el valor server1
.$cookie_bar
para el ID de sesión inicial,
y almacena los ID de sesión alternativos devueltos por el almacenamiento remoto
en $upstream_http_x_sticky_sid
:http {
upstream u1 {
server srv1;
server srv2;
sticky learn zone=sz:1m
lookup=$cookie_bar
remote_action=/remote_session
remote_result=$upstream_http_x_sticky_sid;
zone z 1m;
}
server {
listen localhost;
location / {
proxy_pass http://u1/;
}
location /remote_session {
internal;
proxy_set_header X-Sticky-Sessid $sticky_sessid;
proxy_set_header X-Sticky-Sid $sticky_sid;
proxy_set_header X-Sticky-Last $msec;
proxy_pass http://remote;
}
}
}
norefresh
), se realiza una subpetición al recurso
especificado en remote_action
.zone
en la configuración sticky
es opcional.
Si no se establece,
Angie depende completamente del almacenamiento remoto:
no almacena en caché las sesiones localmente
(aunque permite almacenar en caché las respuestas de almacenamiento mediante proxy_cache
)
y contacta con el almacenamiento remoto cada vez
que se necesita recuperar o crear una sesión.X-Sid
y así confirma o anula la elección de Angie:http {
proxy_cache_path c1 keys_zone=s1:1m;
upstream tc_0 {
server 10.0.0.1 sid=web-server-01;
server 10.0.0.2 sid=web-server-02;
sticky learn
lookup=$arg_id
remote_action=@create_session
remote_result=$upstream_http_x_sid;
}
server {
listen 127.0.0.1:8080;
location / {
proxy_pass http://tc_0/;
}
server {
listen 127.0.0.1:8080;
location / {
proxy_pass http://tc_0/;
}
# Solicitud al almacenamiento de sesión remoto
location @create_session {
internal;
proxy_set_header X-Sticky-Sessid $sticky_sessid;
proxy_set_header X-Sticky-Sid $sticky_sid;
proxy_set_header X-Sticky-Last $msec;
proxy_pass http://session_backend;
proxy_connect_timeout 1s;
proxy_read_timeout 1s;
proxy_cache s1;
proxy_cache_valid 200 1d;
proxy_cache_key "$scheme$proxy_host$request_uri$sticky_sessid";
}
}
}
HTTP/1.1 200 OK
...
X-Sid: web-server-01
X-Session-Backend: backend-pool-1
$upstream_http_x_sid
,
con el valor web-server-01
;$upstream_http_x_session_backend
,
con el valor backend-pool-1
.$upstream_http_x_sid
está especificada en el parámetro remote_result
,
su valor se utilizará
para seleccionar el servidor con sid=web-server-01
.sticky_secret#
cookie
y route
.
El string puede contener variables, por ejemplo, $remote_addr
:upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
sticky cookie cookie_name;
sticky_secret my_secret.$remote_addr;
}
$ echo -n "<VALUE><SALT>" | md5sum
sticky_strict#
upstream#
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
zone#
Variables Integradas#
http_upstream
admite las siguientes variables integradas:$sticky_sessid
#remote_action
en sticky;
almacena el ID de sesión inicial tomado de lookup
.$sticky_sid
#remote_action
en sticky;
almacena el ID del servidor previamente asociado con la sesión.$upstream_addr
#X-Accel-Redirect
o error_page, entonces las direcciones de los servidores de diferentes grupos se separan por dos puntos, por ejemplo:$upstream_bytes_received
#$upstream_bytes_sent
#$upstream_cache_status
#MISS
, BYPASS
, EXPIRED
, STALE
, UPDATING
,
REVALIDATED
, o HIT
:MISS
: La respuesta no se encuentra en la caché,
y la solicitud se reenvía al servidor upstream.BYPASS
: La caché se omite,
y la solicitud se reenvía directamente al servidor upstream.EXPIRED
: La respuesta en caché está obsoleta,
y se envía una nueva solicitud para el contenido actualizado al servidor upstream.STALE
: La respuesta en caché está obsoleta,
pero se servirá a los clientes
hasta que eventualmente se obtenga una actualización del servidor upstream.UPDATING
: La respuesta en caché está obsoleta,
pero se servirá a los clientes
hasta que se complete la actualización actualmente en curso desde el servidor upstream.REVALIDATED
: La respuesta en caché está obsoleta,
pero se revalida con éxito
y no necesita una actualización del servidor upstream.HIT
: La respuesta se sirvió desde la caché.$upstream_connect_time
#$upstream_header_time
#$upstream_http_<name>
#Server
está disponible a través de la variable $upstream_http_server
. Las reglas para convertir los nombres de los campos de cabecera a nombres de variables son las mismas que para las variables que comienzan con el prefijo $http_
. Solo se guardan los campos de cabecera de la respuesta del último servidor.$upstream_queue_time
#$upstream_response_length
#$upstream_response_time
#$upstream_status
#$upstream_sticky_status
#""
NEW
HIT
MISS
$upstream_trailer_<name>
#