proxy_cache_bypass sigue entregando una respuesta antigua almacenada en caché si la URL cambia a no almacenable en caché

proxy_cache_bypass sigue entregando una respuesta antigua almacenada en caché si la URL cambia a no almacenable en caché

En circunstancias normales, cuando se usa proxy_cache_bypassnginx, se obtendrá una copia nueva del flujo ascendente y se sobrescribirá la respuesta almacenada en caché con la nueva.

Pero si la URL cambia de una respuesta que se puede almacenar en caché a una que no se puede almacenar en caché (por ejemplo, a una respuesta 4xx con Cache-Control: no-cache), entonces el uso proxy_cache_bypassentregará una copia nueva desde el origen, pero dejará la copia anterior en la caché.

Lo que significa que cada vez que se solicita la URL sin activarla proxy_cache_bypass, seguirá entregando el caché anterior.

Supongo que este es un comportamiento intencionado, porque proxy_cache_bypasssolosobrescriberespuestas almacenadas en caché guardando una nueva, y una no-cacherespuesta significa que no hay nada que guardar? ¿Es esto lo que está pasando?

¿Como puedo resolver esto? No quiero habilitar el almacenamiento en caché para respuestas 4xx...

Estoy ejecutando nginx/1.14.2

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:70m max_size=28g inactive=1d;
proxy_temp_path /var/cache/nginx/tmp;
proxy_cache my-cache;
proxy_cache_key $remote_user$scheme$host$request_uri;

proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504 http_429;

proxy_cache_bypass $http_cache_control;

proxy_read_timeout 90;
add_header X-Cache-Status $upstream_cache_status;

etag off;

Respuesta1

Puede indicarle a nginx que almacene en caché solo las respuestas 200, 301 y 302 especificando

proxy_cache_valid 10m;

Esto le dice a nginx que almacene en caché las respuestas válidas durante diez minutos.

Respuesta2

Este es el comportamiento esperado. Es por eso que quieren que uses la versión paga para obtener elproxy_cache_purgedirectiva

información relacionada