
Tengo NGINX como proxy inverso y dos Apache como servidores ascendentes.
Cada vez que visito example.com (dirigido a NGINX), ambos servidores Apache reciben la solicitud GET. Parece extraño ya que NGINX funciona de forma predeterminada según el método Round Robin.
Aquí está mi configuración: -
upstream apache {
server 172.18.0.164;
server 172.18.8.18;
}
location / {
proxy_pass http://apache;
}
Inicia sesión en la máquina Apache 1: -
192.168.10.236 - - [05/octubre/2015:07:59:21 -0400] "OBTENER/HTTP/1.0" 200
Inicia sesión en la máquina Apache 2: -
172.18.8.97 - - [05/octubre/2015:11:59:27 +0000] "OBTENER /wordpress/HTTP/1.0"
Respuesta1
Directamente desde elGuía de administración de Nginx:
Habilitar la persistencia de la sesión
NGINX Plus admite tres métodos de persistencia de sesiones. Los métodos se establecen con elpegajosodirectiva.
Elgalleta pegajosamétodo. Con este método, NGINX Plus agrega una cookie de sesión a la primera respuesta del grupo ascendente e identifica el servidor que envió la respuesta. Cuando un cliente emita la siguiente solicitud, contendrá el valor de la cookie y NGINX Plus enrutará la solicitud al mismo servidor ascendente:
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
En el ejemplo, el srv_id
parámetro establece el nombre de la cookie que se establecerá o inspeccionará. El parámetro opcional expires
establece el tiempo que el navegador debe conservar la cookie. El parámetro opcional domain
define un dominio para el cual se establece la cookie. El parámetro opcional path
define la ruta para la cual se establece la cookie. Este es el método de persistencia de sesión más simple.
Elruta pegajosamétodo. Con este método, NGINX Plus asignará una "ruta" al cliente cuando reciba la primera solicitud. Todas las solicitudes posteriores se compararán con lasrutaparámetro de laservidordirectiva para identificar el servidor donde se enviarán las solicitudes. La información de la ruta se toma de una cookie o de un URI.
upstream backend {
server backend1.example.com route=a;
server backend2.example.com route=b;
sticky route $route_cookie $route_uri;
}
Elgalleta aprendermétodo. Con este método, NGINX Plus primero encuentra identificadores de sesión inspeccionando solicitudes y respuestas. Luego, NGINX Plus "aprende" qué servidor ascendente corresponde a qué identificador de sesión. Generalmente, estos identificadores se pasan en una cookie HTTP. Si una solicitud contiene un identificador de sesión ya "aprendido", NGINX Plus reenviará la solicitud al servidor correspondiente:
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky learn
create=$upstream_cookie_examplecookie
lookup=$cookie_examplecookie
zone=client_sessions:1m
timeout=1h;
}
En el ejemplo, uno de los servidores ascendentes crea una sesión configurando la cookie "EXAMPLECOOKIE" en la respuesta.
El parámetro obligatorio create
especifica una variable que indica cómo se crea una nueva sesión. En nuestro ejemplo, las nuevas sesiones se crean a partir de la cookie "EXAMPLECOOKIE" enviada por el servidor ascendente.
El parámetro obligatorio lookup
especifica cómo buscar sesiones existentes. En nuestro ejemplo, las sesiones existentes se buscan en la cookie “EXAMPLECOOKIE” enviada por el cliente.
El parámetro obligatorio zone
especifica una zona de memoria compartida donde se guarda toda la información sobre las sesiones fijas. En nuestro ejemplo, la zona tiene un nombre client_sessions
y un tamaño de 1 megabyte.
Este es un método de persistencia de sesión más sofisticado, ya que no requiere mantener ninguna cookie en el lado del cliente: toda la información se mantiene en el lado del servidor en la zona de memoria compartida.