Puncte:0

Cum să evitați memorarea nebună în cache cu antetul „Vary: Cookie” în NGINX

drapel ke

Știu Variază: Cookie este nu prea placut, deoarece provoacă memorarea în cache a fiecărei variante de cookie-uri pe care un utilizator ar putea raporta. Pe de altă parte, fără el, a trebuit să folosesc Cache-Control: fără cache să spun serverului meu de stocare în cache NGINX să omite în întregime conținutul de stocare în cache ar putea să aibă un utilizator conectat (în fiecare pagină a site-ului meu, de altfel, deoarece există o casetă de cont în partea de sus a paginii).

Trimit cookie-uri numai dacă utilizatorul se conectează, astfel încât majoritatea vizualizărilor de pagină ar beneficia de memorarea în cache. Aș dori să o restrâng astfel încât să existe doar două variante: o versiune în cache pentru utilizatorii a căror „varianță” este că au Nu cookie-uri și o versiune non-cache pentru cei care au cookie-uri (de exemplu, utilizatorul este autentificat și are cookie-uri de autentificare).

Dacă adaug „Vary: Cookie” la programul meu Perl, există vreo modalitate de a-i spune lui NGINX că în acest caz ar trebui să acorde atenție doar dacă un sesiune ID cookie există sau nu? Ceva de genul -- pentru a face un pseudo-antet -- Variază: Cookie('sessionId')? Dacă există o modalitate de a implementa acest lucru în antetul produs de script-ul pe care NGINX l-ar respecta atunci, cred că aș prefera asta decât să-l pun în configurația NGINX, dar orice soluție ar fi apreciată.

Nu sunt pe deplin sigur cum să testez dacă voi face NGINX să înnebunească cu memorarea în cache, dar mă întreb dacă ceva în acest sens ar putea funcționa: la un vizualizator care nu este conectat, scriptul trimite Variază: Cookie, dar asupra unui spectator care este conectat, trimite atât acel antet, cât și Cache-Control: fără cache. NGINX ar înțelege acest lucru pentru a-i spune să memoreze în cache primul răspuns, dar nu și varianta? Sau aș strica ceva în moduri pe care nu le prind acum?

Actualizați: Iată o mostră a unuia dintre blocurile mele de server:

Server {
    server_name myservername.tld
    asculta 80;

    Locație / {
        proxy_cache $PROXY_CACHE;

        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
        timeout eroare proxy_cache_use_stale http_429 http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
        proxy_cache_lock activat;

        proxy_pass $scheme://$APACHE_PROXY_REQ_IP:$APACHE_PROXY_REQ_PORT;
    }

}
Michael Hampton avatar
drapel cz
Vă rugăm să postați blocul `server` nginx.
drapel ke
Am adăugat blocul `server`. Mulțumiri!
Puncte:1
drapel cz

Ar trebui să te uiți la directive proxy_no_cache și proxy_cache_bypass.

proxy_no_cache spune nginx condițiile în care nu ar trebui să memoreze în cache răspunsul din aplicația dvs. Puteți defini acest lucru ca fiind cam orice doriți, de exemplu:

proxy_no_cache $cookie_sessionid;

proxy_cache_bypass operează în cealaltă direcție: îi spune lui nginx când o solicitare nu ar trebui să fie servită din cache, ci să fie transmisă aplicației dvs., chiar dacă există o intrare î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.