http - Cómo hacer que Varnish ignore, no elimine las cookies
caching (1)
Solo las sesiones son exclusivas de cada cliente, no necesariamente las cookies.
Lo que quieres tiene sentido y es posible con Varnish, solo es cuestión de crear tu propia vcl. Preste atención a las siguientes partes de default.vcl:
sub vcl_recv {
...
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
}
sub vcl_hit {
if (!obj.cacheable) {
return (pass);
}
...
}
sub vcl_fetch {
if (!beresp.cacheable) {
return (pass);
}
if (beresp.http.Set-Cookie) {
return (pass);
}
...
}
Tienes que reemplazar estas partes con tu propia lógica; Es decir, defina sus propias funciones vcl_. De forma predeterminada, las solicitudes (vcl_recv) y las respuestas (vcl_fetch) con cookies no se pueden almacenar en caché. Usted conoce mejor su aplicación de back-end y debe volver a escribir la lógica de almacenamiento en caché genérica para este caso específico. Es decir, debe definir en qué caso el barniz realiza una búsqueda, pasa o entrega.
En su caso, tendrá páginas (casos 1 y 2) sin una cookie variable, que se almacenarán en caché y serán compartidas por todos (solicitudes con / sin cookies); simplemente no te importa req.http.Cookie en vcl_recv. No almacenaría en caché las páginas (caso 3) con una cookie variable por (o al menos no por mucho tiempo), ya que no se pueden compartir en absoluto; hacer un ''pase'' en vcl_fetch.
Quiero usar Varnish para almacenar en caché ciertas páginas incluso en presencia de cookies. Hay 3 posibilidades que necesito cuidar:
- Un usuario anónimo está viendo alguna página.
- Un usuario registrado está viendo alguna página con personalización ligera. Todas estas personalizaciones se almacenan en una cookie firmada y se completan dinámicamente con Javascript. El encabezado http vary-cookie no está configurado.
- Un usuario que ha iniciado sesión está viendo alguna página con datos personalizados de la base de datos. Se establece el encabezado http vary-cookie.
Los comportamientos esperados serían:
- Cachear la página. Este es el escenario más básico para que Varnish lo maneje.
- Almacene en caché la página y no elimine la cookie porque alguna lógica de Javascript lo necesita.
- Nunca almacene en caché esta página porque vary-cookie está señalando que el contenido de la cookie afectará el resultado de esta página.
He leído algunos documentos en Varnish y no puedo decir si este es el comportamiento predeterminado o si hay alguna configuración que tengo que hacer en VCL para que esto suceda.