Puncte:0

How do you let a call through in varnish when a cookie "lang" is not set?

drapel my

How do you let a call through in varnish when a cookie "lang" is not set? I want to let a call go through and not return the cache when the cookie "lang" is set and send the request to apache, how do I do this?

Puncte:1
drapel in

Ocolirea memoriei cache când nu a fost setat un cookie lang

În forma sa cea mai de bază, acesta este codul VCL de care aveți nevoie trece solicitări către backend care nu conțin a lang cookie:

sub vcl_recv {
    if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )") {
        întoarcere(trece);
    }
}

Cu toate acestea, probabil că va trebui să definiți o anumită logică în cazul în care lang cookie-ul a fost setat.

Folosind valoarea cookie-ului lang

Următorul fragment VCL extrage limba care a fost setată de lang cookie și îl stochează în req.http.lang.

Această valoare este folosită pentru a crea o variație de cache pe limbă:

sub vcl_recv {
    if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )") {
        întoarcere(trece);
    } 
    set req.http.lang = regsub(req.http.Cookie,"(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[ ^;]*)+)","\3");
    //Altă logică
    return(hash);
}

sub vcl_hash {
    dacă(req.http.lang) {
        hash_data(req.http.lang);
    }
}

Fragmentul de mai sus apelează, de asemenea, în mod explicit return (hash). La un moment dat va trebui să forțați Varnish să memoreze în cache atunci când lang cookie-ul este setat, deoarece comportamentul standard Varnish memorează în cache orice când sunt prezente cookie-uri.

am adaugat un //Altă logică comentariu, pentru că presupun că va exista mai multă logică pentru a ocoli memoria cache. De exemplu, atunci când solicitați alte metode decât OBȚINE și CAP sunt utilizate sau pentru modele URL personalizate care trebuie să ocolească memoria cache.

Evitarea prea multor variații de cache

The hash_data(req.http.lang) declarația se va asigura că este creată o variație de cache pentru fiecare valoare pe care lang cookie-ul poate avea.

Pericolul este că utilizatorii cu intenții rele încep să adauge valori aleatorii la lang cookie pentru a umple memoria cache.

Ținând cont de acest risc, ar fi logic să enumerați în mod explicit limbile acceptate în expresia dvs. obișnuită.

Iată regex inițial:

(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+)

Iată un exemplu cu limbi acceptate codificate:

(^|([^;]*;)+)\s*lang=(en|es|de|it|es|fr|nl)\s*($|(;[^;]*)+)

Doar adaptați acest regex la nevoile dvs. și limbile suportate de platforma dvs. web.

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.