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

Resultado de imagen para images sticky

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





















Comentarios

Facebook Like

Entri Populer

hackear wifi con kali linux 馃摗

Instalar Netbeans 10 en Windows 10

Instalar netbeans 10 en ubuntu 18.04