Categor铆as: [Curso] Varnish 5

Varnish cache Colocar un sticky en la sesion del usuario para que sea despachado por el mismo servidor ?

Un problema que tenemos con varnish cache y el balanceo de carga es que se asigna un servidor diferente a cada peticion, esto es un problema si queremos conservar los datos de nuestro cliente en un servidor por ejemplo un e-commerce. Para solucionar este problema podemos asignar un sticky al cliente el cual no cambia y el cual le dice a varnish que servidor le debe asignar. Con este codigo podemos lograr dicho cometido:

/etc/varnish/default.vcl

vcl 4.0;

import directors;
import std;
import cookie;
import header;
//Declaramos los servidores y sus caracteristicas
backend www1 {
.host = "10.132.54.66";
.port = "80";
}

backend www2 {
.host = "10.132.13.11";
.port = "80";
}
//Inicializamos varnish
sub vcl_init {
//Declaramos el director de tipo hash para que reciba datoas aleatorios y en base a esos datos seleccione un servidor
new hash_director = directors.hash();
hash_director.add_backend(www1, 1);
hash_director.add_backend(www2, 1);
}
//esta funcion es para decirle a varnish que datos se mandan y a que servidor
sub vcl_recv {
//Si la la url es de imagenes o de admin redireccionamos ese trafico al servidor 1
if (req.http.host ~ "images.demotodocuba.com" || req.url ~ "wp-(login|admin)" ) {
set req.backend_hint = www1;
}
else {
//Leemos las cookies
cookie.parse(req.http.cookie);
//Si la cookie ya esta en el navegador (osea la segunda refresacada) asignamos esa cookie a nuestra variable sticky
if(cookie.get("sticky")) {
set req.http.sticky = cookie.get("sticky");
}
//Si no esta la variable en nuestro navegador generamos un nuevo sticky aleatorio
else {
set req.http.sticky = std.random(1, 100);
}
//El sticky generado anteriormente se lo pasamos al director ya el director se encargara de asignar un servidor siempre que paemos el mismo sticky
set req.backend_hint = hash_director.backend(req.http.sticky);
}
}
//Esta funcion se usa para modificar lo que sale de varnish
sub vcl_deliver {
//Si hay un sticky ya generado este se escribe en la cabecera con una expiracion de 60 min
if(req.http.sticky){
header.append(resp.http.Set-Cookie,"sticky=" + req.http.sticky + "; Expires=" + cookie.format_rfc1123(now, 60m));
}
}
 
//include "custom.vcl"; //Otros parametros

Eugenio Chaparro

Compartir
Publicado por
Eugenio Chaparro

Entradas recientes

馃煝Editar c贸digo de un m贸dulo en Dolibarr [04]

馃煝Editar c贸digo de un m贸dulo en Dolibarr [04]

En este tutorial vamos editar el c贸digo de nuestro m贸dulo personas para poder personalizar algunas…

2 meses hace
馃煝Crear un sub_m贸dulo en Dolibarr [03]

馃煝Crear un sub_m贸dulo en Dolibarr [03]

En este tutorial vamos a crear un sub m贸dulo llamado seguridad que ser谩 muy parecido…

2 meses hace
馃煝Modificar un m贸dulo en Dolibarr [02]

馃煝Modificar un m贸dulo en Dolibarr [02]

En este tutorial aprenderemos a editar el objeto personas del modulo persona que creamos en…

2 meses hace
馃煝Constructor de m贸dulos en Dolibarr

馃煝Constructor de m贸dulos en Dolibarr

Como mencionamos anteriormente Dolibarr es un proyecto realizado sobre la base de una pol铆tica clara:…

2 meses hace
馃煝Tickets en Dolibarr [19]

馃煝Tickets en Dolibarr [19]

Los ticket en dolibarr nos ayudan a comunicar inconveniente en nuestros productos y servicios dentro…

2 meses hace
馃煝Agenda en Dolibarr [18]

馃煝Agenda en Dolibarr [18]

Las agendas en dolibarr nos ayudan a ver las actividades realizadas en proceso y por…

2 meses hace