Taula de continguts:
- Una introducció al vernís
- Els fonaments bàsics: imatges de la memòria cau
- Estàndard: imatges i pàgines del cau
- Estàndard ++: Augmenta la resiliència del servidor
- Ús avançat: creeu un servidor web resistent en un entorn distribuït
- Una eina poderosa
Quan es tracta del rendiment del lloc web, Varnish és una tecnologia calenta. Amb una instal·lació i una configuració senzilles, és possible augmentar el rendiment de qualsevol lloc web i servir fins a un milió de pàgines amb només un petit servidor privat virtual., Us mostraré quatre possibles configuracions que us ajudaran a millorar el temps de resposta del vostre lloc, tant si serviu centenars, milers o milions de pàgines.
Una introducció al vernís
Varnish-Cache és un accelerador web que té com a objectiu la memòria cau del contingut del lloc web. És un projecte de codi obert que té l’objectiu d’optimitzar i accelerar l’accés als llocs web de manera no invasiva (sense canviar el codi) i permetre posar-se les mans al lloc web.
Van ser els creadors de Varnish Cache qui ho van anomenar un accelerador web, perquè el seu objectiu principal és millorar i accelerar el front web d'un lloc web. Varnish ho aconsegueix emmagatzemant còpies de les pàgines servides pel servidor web a la memòria cau. La propera vegada que es sol·liciti la mateixa pàgina, vernís servirà la còpia en lloc de sol·licitar-la a la pàgina del servidor web, donant lloc a un gran rendiment del rendiment.
Una altra de les característiques clau de Varnish Cache, a més del seu rendiment, és la flexibilitat del seu llenguatge de configuració, VCL. VCL permet escriure polítiques sobre com s’han de gestionar les sol·licituds entrants. En aquesta política, podeu decidir quin contingut voleu servir, des d’on voleu obtenir el contingut i com s’ha de modificar la sol·licitud o la resposta.
En els següents exemples de configuració, us mostraré quines regles VCL heu d'utilitzar per assolir alguns objectius, des d'una simple memòria cau d'imatges i objectes estàtics, fins a l'ús del vernís en un entorn distribuït o que actuï com a equilibrador de càrrega.
Tots els exemples següents són per a vernís 3.x. Tingueu en compte que Varnish 2.x utilitza diferents sintaxis i regles, per la qual cosa aquests exemples no són compatibles amb aquesta versió.
A continuació es mostren els principals estats de vernís, que utilitzarem al fitxer de configuració VCL:
recv
Aquesta és la primera funció que s’anomena al rebre una sol·licitud. Aquí podem manipular la sol·licitud abans d’anar a comprovar si està present a la memòria cau. Si no es pot introduir una sol·licitud en una memòria cau, també es pot triar el servidor de fons al qual s’enviarà la sol·licitud en aquesta fase.
passar
Podem fer servir aquesta funció quan volem passar la sol·licitud al servidor web i caché la resposta.
canonada
Aquesta funció ignora el vernís i envia la sol·licitud al servidor web.
Cercar
Amb una cerca, Varnish demana verificar si la resposta està present i vàlida a la memòria cau.
cercar
Aquesta funció s’anomena després que la recuperació de contingut de la part del darrere sigui invocada per una passada o una falta.
Els fonaments bàsics: imatges de la memòria cau
Analitzem un exemple de configuració. En aquest primer exemple, només emmagatzemarem la memòria cau de les imatges i els fitxers estàtics com els fitxers CSS. Aquesta configuració és realment útil quan no coneixeu el lloc web que voleu potenciar, de manera que només podeu decidir que totes les imatges, CSS i JavaScript són iguals per a tots els usuaris. Per distingir els usuaris, el protocol HTTP utilitza cookies, per la qual cosa hem d’eliminar-les en aquest tipus de sol·licituds perquè siguin iguals per a vernís:
sub vcl_recv{
if(req.url ~ " * \.(png|gif|jpg|swf|css|js)"{
unset req.http.cookie;
unset req.http.Vary;
return(lookup);
}
# strip the cookie before the image is inserted into cache.
sub vcl_fetch {
if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
unset beresp.http.set-cookie;
}
I ja està. Amb aquest fitxer VCL, podeu emmagatzemar en memòria cau contingut estàtic.
Estàndard: imatges i pàgines del cau
Normalment, no només voleu emmagatzemar en memòria cau el contingut estàtic del vostre lloc web, sinó que també voleu emmagatzemar en memòria cau algunes pàgines dinàmiques generades pel vostre servidor web, però que són iguals per a tots els usuaris, o almenys per a tots els vostres anònims. usuaris. En aquesta fase, heu de saber triar quines pàgines es poden col·locar en memòria cau i quines no.
Un bon exemple és Wordpress, un dels sistemes de gestió de contingut més utilitzats. Wordpress genera pàgines de llocs web de forma dinàmica amb PHP i consultes a una base de dades MySQL. Això és bo perquè podeu actualitzar fàcilment el vostre lloc web des de la interfície d’administració amb pocs clics, però també és car en termes de recursos utilitzats. Per què executar el mateix script PHP i la meva consulta MySQL cada vegada que un usuari arriba a la pàgina principal? Podem utilitzar vernís per a caché les pàgines més visitades i obtenir resultats increïbles.
Aquestes són algunes regles que poden ser útils en una instal·lació de Wordpress:
sub vcl_recv{
# Let's make sure we aren't compressing already compressed formats.
if (req.http.Accept-Encoding) {
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|mp3|mp4|m4v)(\?. * |)$") {
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
remove req.http.Accept-Encoding;
}
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
return(lookup);
}
# If you request the special pages go directly to them
if (req.url ~ "wp-(login| admin )") {
return (pipe);
}
}
sub vcl_miss {
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
}
if (req.url ~ "^/+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {
unset req.http.cookie;
set req.url = regsub(req.url, "\?.$", "");
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
sub vcl_fetch {
if (req.url ~ "^/$") {
unset beresp.http.set-cookie;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset beresp.http.set-cookie;
}
}
Podeu veure que en aquest exemple, emmagatzemem la memòria cau de totes les pàgines del nostre lloc web, però per a les que tenen "wp- admin" o "wp-login" a l'URL les cadenes són ubicacions "especials" que s'utilitzen per iniciar sessió per Wordpress com a administrador. Com a tal, volem parlar directament amb el servidor web i obviar la memòria cau de vernís.
Naturalment, si utilitzeu Drupal, Joomla o un lloc web a mida, heu de canviar aquestes regles, però l’objectiu sempre és el mateix: enviar totes les pàgines i la memòria cau dinàmiques que pugueu al vostre extrem.
Estàndard ++: Augmenta la resiliència del servidor
De vegades els servidors web es fan lents perquè tenen una càrrega elevada. El vernís també pot ajudar-lo. Podem utilitzar algunes directrius especials per dir-li a vernís que eviti parlar amb la part del darrere si està avall o respon massa lentament. En aquest cas, vernís utilitza la directiva "gràcia".
La gràcia en l'àmbit del vernís significa lliurar objectes caducats d'una altra manera quan les circumstàncies ho exigeixen. Això pot passar perquè:
- El director de fons seleccionat s'ha reduït
- Un fil diferent ja ha fet una sol·licitud a la part posterior que encara no està acabada.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Aquesta configuració indica a vernís que posi a prova el final de fons i augmenti el període de gràcia si té problemes. L'exemple anterior també introdueix la directiva "req.backend.healthy", que s'utilitza per comprovar el back-end. Això és realment útil quan teniu diversos extrems posteriors, així que donem un cop d’ull a un exemple més avançat.
Ús avançat: creeu un servidor web resistent en un entorn distribuït
Aquest és el nostre fitxer de configuració final amb totes les opcions que hem vist fins ara i la definició de dues posteriors acaba amb alguna directiva especial per a la sonda. Així és com vernís determina si un servidor web viu o no.
.url
El vernís realitzarà les sol·licituds al darrere amb aquest URL.
.timeout
Determina la velocitat que ha d’acabar la sonda. Heu d’especificar una unitat de temps amb un número, com ara "0.1 s", "1230 ms" o fins i tot "1 h".
.interval
Quant espereu entre les enquestes. També heu d'especificar aquí una unitat de temps. Tingueu en compte que no es tracta d'una "taxa" sinó d'un "interval". La taxa de sondeig més baixa és (.timeout + .interval).
.window
Quantes de les darreres enquestes a considerar a l’hora de determinar si el fons és saludable.
.llindar
Quantes de les darreres enquestes .window han de ser bones perquè el fons es declari saludable.
Ara podem fer servir la directiva "req.backend.healthy" i obtenir un resultat booleà que ens indica si els extrems posteriors estan vius o no.
#
# Customized VCL file for serving up a Wordpress site with multiple back-ends.
#
# Define the internal network subnet.
# These are used below to allow internal access to certain files while not
# allowing access from the public internet .
acl internal {
"10.100.0.0"/24;
}
# Define the list of our backends (web servers), they Listen on port 8080
backend web1 { .host = "10.100.0.1"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}
backend web2 { .host = "10.100.0.2"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}
# Define the director that determines how to distribute incoming requests.
director default_director round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
# Respond to incoming requests.
sub vcl_recv {
set req.backend = default_director;
# Use anonymous, cached pages if all backends are down.
if (!req.backend.healthy) {
unset req.http.Cookie;
set req.grace = 6h;
} else {
set req.grace = 30s;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
return(lookup);
}
# If you request the special pages go directly to them
if (req.url ~ "wp-(login| admin )") {
return (pipe);
}
# Always cache the following file types for all users.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {
unset req.http.Cookie;
}
}
# Code determining what to do when serving items from the web servers.
sub vcl_fetch {
# Don't allow static files to set cookies.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {
# beresp == Back-end response from the web server.
unset beresp.http.set-cookie;
}
# Allow items to be stale if needed.
set beresp.grace = 6h;
}
Una eina poderosa
Aquests són només alguns exemples que us poden ajudar a començar a utilitzar Varnish. Aquesta eina és realment potent i pot ajudar-vos a aconseguir un gran rendiment del rendiment sense comprar més maquinari o màquines virtuals. Per a molts administradors de llocs web, això suposa un veritable benefici.