Cómo omitir el caché de barniz según un encabezado específico

Cómo omitir el caché de barniz según un encabezado específico

He estado trabajando en esto desde hace 2 días, pero no tuve suerte.

Entonces, básicamente, quiero omitir el caché de barniz para una URL de solicitud entrante específica.

He definido esta regla:

sub vcl_recv {
     if (req.url ~ "/en/reading-books/") { return(pass); }
}

Pero cuando actualizo la página, todavía se almacena en caché y los encabezados de respuesta devuelven estos:

via: 1.1 varnish-v4
x-varnish: 2

y este comando que se ejecuta en segundo plano produce un resultado:

varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'

¿Que me estoy perdiendo aqui? Cualquier consejo es realmente apreciado.

Respuesta1

Actualizar a una versión compatible

Antes de hablar sobre la depuración del almacenamiento en caché de esa URL entrante, quiero señalar queestá ejecutando una versión de Varnish al final de su vida útil que tiene vulnerabilidades de seguridad conocidas.

Actualice a la última versión o utilice Varnish Cache 6.0 LTS.

Verhttps://www.varnish-software.com/developers/tutorials/#installationspara obtener una lista de guías de instalación para una variedad de distribuciones de Linux.

Coincidencia de una URL exacta o un patrón de URL

El código VCL que compartió omite el caché de /en/reading-books. ¿Está intentando hacer una coincidencia exacta en esa URL o un patrón que coincida con un conjunto de URL?

Para una coincidencia exacta, ajustaría la URL de la siguiente manera:

sub vcl_recv {
    if (req.url == "/en/reading-books/") { 
        return(pass); 
    }

}

Cuando coincides con varias URL, todas las cuales comienzan con /en/reading-books/, ajustaría la VCL de la siguiente manera:

sub vcl_recv {
    if (req.url == "^/en/reading-books/.*$") { 
        return(pass); 
    }

}

¿Qué pasa con los encabezados de respuesta específicos de Varnish?

Mencionaste los siguientes encabezados en tu pregunta:

via: 1.1 varnish-v4
x-varnish: 2

Estos indican que estás usando Varnish, no necesariamente que Varnish entrega la respuesta del caché.

El viaencabezado simplemente informa al usuario que Varnish es un servidor proxy en la cadena de respuesta.

El valor del x-varnishencabezado generalmente se refiere al ID de la transacción que manejó su solicitud.

En realidad, es el Ageencabezado el que indica durante cuánto tiempo se ha entregado una respuesta desde el caché.

Comprobando los registros

El varnishncsacomando tiene acceso a los registros de memoria compartida de Varnish, pero en realidad no muestra mucha información útil sobre el almacenamiento en caché.

El propósito de varnishncsaes devolver información de registro de acceso, similar a lo que devuelven Apache y Nginx.

Ejecute el siguiente comando para depurar el almacenamiento en caché:

varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"

Si bien varnishncsaproduce una respuesta de una sola línea en formato NCSA, varnishlogdevolverá la transacción completa. Agregue el resultado de varnishlogsu pregunta y lo ayudaré a depurar.

información relacionada