
Em circunstâncias normais, ao usar proxy_cache_bypass
o 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_bypass
realmente 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_bypass
apenassubstituirespostas armazenadas em cache salvando uma nova, e uma no-cache
resposta 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