Varnish: ¿Guardar en caché todo el contenido hasta una fecha determinada?

Varnish: ¿Guardar en caché todo el contenido hasta una fecha determinada?

¿Hay alguna manera de configurar Varnish para almacenar todo en una ruta determinada hasta la fecha que establezca?

Mi sitio se actualiza una vez al mes, por lo que simplemente me gustaría ofrecer contenido en caché hasta entonces.

Respuesta1

Simplemente agregue el campo de encabezado

Expires: Thu, 01 Dec 1994 16:00:00 GMT

a cada respuesta. Y por supuesto fijar la fecha a final de mes. El barniz debe respetar este campo del encabezado. Y asegúrese de eliminar todos los encabezados de control de caché que podrían deshabilitar el almacenamiento en caché (edad máxima, sin caché, etc.).

Respuesta2

En Varnish 7.4, estoy usando esto para hacer que todo el contenido almacenado en caché caduque mañana a medianoche (GMT para facilitar):

set beresp.ttl = (std.time(regsub(now, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")) + 1d - now);

Que hace:

  1. nowcuando se usa como STRING se convierte en un texto como 'Martes, 20 de febrero de 2018 09:30:31 GMT' (documentos)
  2. regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")reemplaza la porción de tiempo con 00:00:00, por lo que hoy es medianoche
  3. std.time(<#2>)convierte el tiempo de tipo STRING a TIME, para que pueda usarse en aritmética de tiempo
  4. <#3> + 1d - nowconvierte la medianoche de hoy en la medianoche de mañana y le calcula los segundos restantes, obteniendo un valor paraberesp.ttl

Todavía lo estoy probando, pero en realidad obtengo una Edad: 3872 para una página que solicité inicialmente un par de horas antes de la medianoche, así que estoy seguro de ello.

Respuesta3

Establezca un ttl = 30 días y Varnish servirá exactamente el mismo objeto durante 30 días.

información relacionada