
En circunstancias normales, cuando se usa proxy_cache_bypass
nginx, 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_bypass
entregará 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_bypass
solosobrescriberespuestas almacenadas en caché guardando una nueva, y una no-cache
respuesta 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