http caching cookies varnish

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:

  1. Un usuario anónimo está viendo alguna página.
  2. 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.
  3. 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:

  1. Cachear la página. Este es el escenario más básico para que Varnish lo maneje.
  2. Almacene en caché la página y no elimine la cookie porque alguna lógica de Javascript lo necesita.
  3. 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.