proxy_cache_bypass continua servindo resposta antiga em cache se o URL mudar para não armazenável em cache

proxy_cache_bypass continua servindo resposta antiga em cache se o URL mudar para não armazenável em cache

Em circunstâncias normais, ao usar proxy_cache_bypasso nginx, ele buscará uma nova cópia do upstream e substituirá a resposta em cache pela nova.

Mas se o URL mudar de uma resposta armazenável em cache para uma resposta não armazenável em cache (por exemplo, para uma resposta 4xx com Cache-Control: no-cache), então using proxy_cache_bypassrealmente servirá uma nova cópia do upstream, mas deixará a cópia antiga no cache.

O que significa que toda vez que a URL for solicitada sem acionamento proxy_cache_bypass, ela continuará servindo o cache antigo.

Acho que este é um comportamento intencional, porque proxy_cache_bypassapenassubstituirespostas armazenadas em cache salvando uma nova, e uma no-cacheresposta significa que não há nada para salvar? É isso que está acontecendo?

Como posso resolver isso? Não quero ativar o cache para respostas 4xx...

Estou executando 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;

Responder1

Você pode dizer ao nginx para armazenar em cache apenas 200, 301 e 302 respostas especificando

proxy_cache_valid 10m;

Isso diz ao nginx para armazenar em cache respostas válidas por dez minutos.

Responder2

Este é o comportamento esperado. É por isso que eles querem que você use a versão paga para obter oproxy_cache_purgediretiva

informação relacionada