Puncte:1

proxy_cache_bypass keeps serving old cached response if URL changes to non-cacheable

drapel md

Under normal circumstances, when using proxy_cache_bypass nginx will fetch a fresh copy from upstream, and overwrite the cached response with the new one.

But if the URL changes from a cacheable to a non-cacheable response (for example to a 4xx response with Cache-Control: no-cache), then using proxy_cache_bypass will indeed serve a fresh copy from upstream, but it will leave the old copy in the cache.

Which means that everytime the URL is requested without triggering proxy_cache_bypass, it will keep serving the old cache.

I guess this is an intended behaviour, because proxy_cache_bypass only overwrites cached responses by saving a new one, and a no-cache response means there is nothing to save? Is this what's happening?

How can I solve this? I don't want to enable caching for 4xx responses...

I'm running 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;
Puncte:0
drapel us

Puteți spune lui nginx să memoreze în cache doar 200, 301 și 302 răspunsuri specificând

proxy_cache_valid 10m;

Acest lucru îi spune lui nginx să memoreze în cache răspunsurile valide timp de zece minute.

drapel md
Da, dar vreau să folosesc timpi mai mari de cache. Momentan îl setez la 24h. În plus, cred că `Cache-Control` suprascrie `proxy_cache_valid`
drapel us
Puteți specifica oricând cu `proxy_cache_valid`. Principalul punct al acestei directive este că limitează stocarea în cache doar la aceste stări de răspuns. Alte coduri de stare nu sunt memorate în cache.
drapel md
Am făcut asta și nu s-a schimbat nimic. Problema nu este că memorează în cache coduri de stare nedorite, ci că răspunsurile care se schimbă dintr-un `Cache-Control` care poate fi stocat în cache la un `Control-cache` care nu poate fi stocat în cache, continuă să servească răspunsul stocat în cache.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.