Am încercat să configurez Varnish pe serverul care are autentificare de bază folosind aceste soluții:
dar nu ajută.
Jurnalele de lac arată încă erori 401:
varnishlog -g raw -i Backend_health
0 Backend_health - mag2.default Încă bolnav 4--X-R- 0 5 10 0,001574 0,000000 HTTP/1,1 401 Neautorizat
Configurația My Varnish (versiunea 4.0):
vcl 4.0;
import std;
# Versiunea minimă de lac este 4.0
# Pentru descărcarea SSL, treceți următorul antet în serverul proxy sau în echilibrul de încărcare: „X-Forwarded-Proto: https”
backend implicit {
.host = "127.0.0.1";
.port = "8080";
.first_byte_timeout = 600s;
.probe = {
.url = "/health_check.php";
.timeout = 2s;
.interval = 5s;
.fereastră = 10;
.pragul = 5;
}
}
acl purge {
"gazdă locală";
}
sub vcl_recv {
dacă (! req.http.Authorization ~ "ZGV2OmRldg de bază=") {
return(synth(401, „Restricționat”));
}
dacă (req.method == „PURGE”) {
if (client.ip !~ purge) {
return (synth(405, „Metoda nu este permisă”));
}
# Pentru a utiliza antetul X-Pool pentru curățarea lacului în timpul implementărilor automate, asigurați-vă că antetul X-Pool
# a fost adăugat la răspuns în configurația serverului dvs. de backend. Acesta este folosit, de exemplu, de către
# capistrano-magento2 bijuterie pentru curățarea conținutului vechi din lac în timpul rutinei sale de implementare.
dacă (!req.http.X-Magento-Tags-Pattern && !req.http.X-Pool) {
return (synth(400, "Este necesar antetul X-Magento-Tags-Pattern sau X-Pool"));
}
dacă (req.http.X-Magento-Tags-Pattern) {
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
}
dacă (req.http.X-Pool) {
ban("obj.http.X-Pool ~ " + req.http.X-Pool);
}
return (synth(200, "Purged"));
}
dacă (req.method != "GET" &&
req.method != „HEAD” &&
req.method != „PUT” &&
req.method != „POST” &&
req.method != „URMA” &&
req.method != „OPȚIUNI” &&
req.method != „ȘTERGERE”) {
/* Non-RFC2616 sau CONNECT care este ciudat. */
retur (conducta);
}
# Ne ocupăm doar de GET și HEAD în mod implicit
if (req.method != „GET” && req.method != „HEAD”) {
întoarcere (trece);
}
# Ocoliți coșul de cumpărături și finalizarea comenzii
dacă (req.url ~ "/checkout") {
întoarcere (trece);
}
# Ocoliți solicitările de verificare a stării de sănătate
dacă (req.url ~ "/pub/health_check.php") {
întoarcere (trece);
}
# Setați starea inițială de utilizare a perioadei de grație
set req.http.grace = "niciunul";
# normalizați adresa URL în cazul schemei și domeniului HTTP de conducere
set req.url = regsub(req.url, "^http[s]?://", "");
# colectează toate cookie-urile
std.collect(req.http.Cookie);
# Filtru de compresie. Consultați https://www.varnish-cache.org/trac/wiki/FAQ/Compression
dacă (req.http.Accept-Encoding) {
if (req.url ~ "\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
# Nu are rost să le comprimăm
unset req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
set req.http.Accept-Encoding = "dezumflare";
} altfel {
# algoritm necunoscut
unset req.http.Accept-Encoding;
}
}
# Eliminați toți parametrii de marketing pentru a minimiza obiectele din cache
if (req.url ~ "(\?|&)(gclid|cx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=" ) {
set req.url = regsuball(req.url, "(gclid|cx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=[- _A-z0-9+()%.]+&?", "");
set req.url = regsub(req.url, "[?|&]+$", "");
}
# Memorarea în cache a fișierelor statice
dacă (req.url ~ "^/(pub/)?(media|static)/") {
# Fișierele statice nu ar trebui să fie memorate în cache în mod implicit
întoarcere (trece);
# Dar dacă utilizați câteva localități și nu utilizați CDN, puteți activa stocarea în cache a fișierelor statice, comentând linia anterioară (#return (pass);) și decomentând următoarele 3 rânduri
#unset req.http.Https;
#unset req.http.X-Forwarded-Proto;
#unset req.http.Cookie;
}
# Solicitările GraphQL autentificate nu ar trebui să fie memorate în cache în mod implicit
if (req.url ~ "/graphql" && req.http.Authorization ~ "^Bearer") {
întoarcere (trece);
}
unset req.http.Authorization;
return (hash);
}
sub vcl_hash {
dacă (req.http.cookie ~ "X-Magento-Vary=") {
hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "\1"));
}
dacă (req.url ~ "/graphql") {
apelați process_graphql_headers;
}
# Pentru a vă asigura că utilizatorii http nu văd avertismentul ssl
dacă (req.http.X-Forwarded-Proto) {
hash_data(req.http.X-Forwarded-Proto);
}
}
sub process_graphql_headers {
dacă (req.http.Store) {
hash_data(req.http.Store);
}
dacă (req.http.Content-Currency) {
hash_data(req.http.Content-Currency);
}
}
sub vcl_backend_fetch {
# autentificare cu admin:admin
set bereq.http.Authorization = "ZGV2OmRldg de bază==";
}
sub vcl_backend_response {
set beresp.grace = 3d;
if (beresp.http.content-type ~ "text") {
set beresp.do_esi = true;
}
if (bereq.url ~ "\.js$" || beresp.http.content-type ~ "text") {
set beresp.do_gzip = true;
}
if (beresp.http.X-Magento-Debug) {
set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
}
# cache numai răspunsurile și 404s cu succes
if (beresp.status != 200 && beresp.status != 404) {
set beresp.ttl = 0s;
set beresp.uncacheable = true;
returnează (livrează);
} elsif (beresp.http.Cache-Control ~ „privat”) {
set beresp.uncacheable = true;
set beresp.ttl = 86400s;
returnează (livrează);
}
# validăm dacă trebuie să-l memorăm în cache și să împiedicăm setarea cookie-urilor
dacă (beresp.ttl > 0s && (bereq.method == „GET” || bereq.method == „HEAD”)) {
unset beresp.http.set-cookie;
}
# Dacă pagina nu poate fi stocată în cache, ocoliți lacul timp de 2 minute ca Hit-For-Pass
dacă (beresp.ttl <= 0s ||
beresp.http.Surrogate-control ~ „fără magazin” ||
(!beresp.http.Surrogate-Control &&
beresp.http.Cache-Control ~ "no-cache|no-store") ||
beresp.http.Vary == "*") {
# Marcați ca Hit-For-Pass pentru următoarele 2 minute
set beresp.ttl = 120s;
set beresp.uncacheable = true;
}
returnează (livrează);
}
sub vcl_deliver {
if (resp.http.X-Magento-Debug) {
dacă (resp.http.x-lac ~ " ") {
set resp.http.X-Magento-Cache-Debug = "HIT";
set resp.http.Grace = req.http.grace;
} altfel {
set resp.http.X-Magento-Cache-Debug = "MISS";
}
} altfel {
nesetat resp.http.Vârsta;
}
# Nu permite browserului să memoreze fișiere non-statice.
if (resp.http.Cache-Control !~ „privat” && req.url !~ „^/(pub/)?(media|static)/”) {
set resp.http.Pragma = "no-cache";
set resp.http.Expires = "-1";
set resp.http.Cache-Control = "fără stocare, fără cache, revalidare obligatorie, vârsta maximă=0";
}
unset resp.http.X-Magento-Debug;
unset resp.http.X-Magento-Tags;
dezactivat resp.http.X-Powered-By;
unset resp.http.Server;
dezactivat resp.http.X-Lac;
dezactivat resp.http.Via;
dezactivat resp.http.Link;
}
sub vcl_hit {
dacă (obj.ttl >= 0s) {
# Atingeți în perioada TTL
returnează (livrează);
}
dacă (std.healthy(req.backend_hint)) {
dacă (obj.ttl + 300s > 0s) {
# Apăsați după expirarea TTL, dar în perioada de grație
set req.http.grace = "normal (server sănătos)";
returnează (livrează);
} altfel {
# Apăsați după TTL și expirarea grației
returnare (preluare);
}
} altfel {
# serverul nu este sănătos, preluați din cache
set req.http.grace = "nelimitat (server nesănătos)";
returnează (livrează);
}
}
sub vcl_synth {
if (resp.status == 401) {
set resp.status = 401;
set resp.http.WWW-Authenticate = "De bază";
returnare (livrare);
}
}