![Cómo omitir el caché de barniz según un encabezado específico](https://rvso.com/image/782629/C%C3%B3mo%20omitir%20el%20cach%C3%A9%20de%20barniz%20seg%C3%BAn%20un%20encabezado%20espec%C3%ADfico.png)
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 via
encabezado simplemente informa al usuario que Varnish es un servidor proxy en la cadena de respuesta.
El valor del x-varnish
encabezado generalmente se refiere al ID de la transacción que manejó su solicitud.
En realidad, es el Age
encabezado el que indica durante cuánto tiempo se ha entregado una respuesta desde el caché.
Comprobando los registros
El varnishncsa
comando 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 varnishncsa
es 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 varnishncsa
produce una respuesta de una sola línea en formato NCSA, varnishlog
devolverá la transacción completa. Agregue el resultado de varnishlog
su pregunta y lo ayudaré a depurar.