Kazalo:
- Uvod v lak
- Osnove: predpomnilniške slike
- Standard: Predpomnilniške slike in strani
- Standard ++: Povečajte odpornost strežnika
- Napredna uporaba: ustvarite prožen spletni strežnik v porazdeljenem okolju
- Zmogljivo orodje
Kar zadeva uspešnost spletnega mesta, je Varnish vroča tehnologija. Z enostavno namestitvijo in konfiguracijo je mogoče povečati zmogljivost katerega koli spletnega mesta in postreči do milijon strani z le majhnim virtualnim zasebnim strežnikom., Pokazal vam bom štiri možne konfiguracije, ki vam bodo pomagale izboljšati odzivni čas vašega spletnega mesta, ne glede na to, ali uporabljate stotine, tisoče ali milijone strani.
Uvod v lak
Varnish-Cache je spletni pospeševalnik s ciljem predpomnjenja vsebine spletnega mesta. Gre za projekt z odprto kodo, katerega namen je optimizirati in pospešiti dostop do spletnih strani neinvazivno - ne da bi spremenili kodo - in vam omogočil, da roke vstavite v svoje spletno mesto.
Ustvarjalci Varnish cache so ga poimenovali spletnega pospeševalnika, saj je njegov glavni cilj izboljšati in pospešiti sprednji del spletnega mesta. Lak to doseže s shranjevanjem kopij strani, ki jih spletni strežnik streže v predpomnilnik. Ko bo naslednjič zahtevan isto stran, bo Varnish kopijo vročil namesto, da bi jo zahteval s spletnega strežnika, kar bo povzročilo izjemno povečanje učinkovitosti.
Druga izmed ključnih lastnosti Varnish cache je poleg njegove zmogljivosti tudi prilagodljivost njegovega konfiguracijskega jezika, VCL. VCL omogoča pisanje pravilnikov o tem, kako naj se obravnavajo dohodne zahteve. V takem pravilniku se lahko odločite, katero vsebino želite prikazovati, od kod želite dobiti vsebino in kako je treba spremeniti zahtevo ali odgovor.
V naslednjih primerih konfiguracije vam bom pokazal, katera pravila VCL uporabite za dosego nekaterih ciljev, od preprostega predpomnjenja slik in statičnih predmetov, do uporabe Varnish v porazdeljenem okolju ali, če deluje kot uravnotežilec obremenitve.
Vsi naslednji primeri so za lak 3.x. Upoštevajte, da Varnish 2.x uporablja drugačno skladnjo in pravila, zato ti primeri niso združljivi s to različico.
Sledijo glavna stanja laka, ki jih bomo uporabili v konfiguracijski datoteki VCL:
recv
To je prva funkcija, ki se pokliče ob prejemu zahteve. Tu lahko z zahtevo manipuliramo, preden preverimo, ali je v predpomnilniku. Če zahteve ni mogoče vstaviti v predpomnilnik, lahko v tej fazi izberete tudi stranski strežnik, na katerega bo poslana zahteva.
prehod
To funkcijo lahko uporabimo, kadar želimo zahtevo posredovati spletnemu strežniku in odgovor shraniti v predpomnilnik.
cev
Ta funkcija obide lak in zahtevo pošlje spletnemu strežniku.
Poglej gor
Z ogledom Varnish zahteva, da preveri, ali je odziv prisoten in veljaven v predpomnilniku.
prinesti
Ta funkcija se pokliče, ko se obnavljanje vsebine s hrbtnega konca prikliče z dovoljenjem ali zgrešenim.
Osnove: predpomnilniške slike
Pa si oglejmo primer konfiguracije. V tem prvem primeru bomo samo predpomnili slike in statične datoteke, kot so datoteke CSS. Ta konfiguracija je res uporabna, če ne poznate spletnega mesta, ki ga želite izboljšati, zato se lahko preprosto odločite, da so vse slike, CSS in JavaScript enaki za vse uporabnike. Za razlikovanje uporabnikov protokol HTTP uporablja piškotke, zato jih moramo pri tej vrsti zahteve odpraviti, tako da so vsi enaki za lak.
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;
}
In to je to. S to datoteko VCL lahko preprosto shranite statično vsebino.
Standard: Predpomnilniške slike in strani
Običajno ne želite samo predpomniti statične vsebine svojega spletnega mesta, ampak želite tudi predpomniti nekaj dinamičnih strani, ki jih ustvari vaš spletni strežnik, vendar so enake za vse uporabnike - ali vsaj za vse vaše anonimne uporabnikov. V tej fazi morate vedeti, katere strani lahko predpomnite in katere ne.
Dober primer je Wordpress, eden najpogosteje uporabljanih sistemov za upravljanje vsebine. Wordpress dinamično generira strani spletnih strani s PHP in poizveduje po zbirki podatkov MySQL. To je lepo, ker lahko spletno mesto z administratorskega vmesnika enostavno posodobite z nekaj kliki, hkrati pa je drago tudi z vidika uporabljenih virov. Zakaj zagnati isti PHP skript in poizvedbo MySQL vsakič, ko uporabnik pristane na domači strani? Z lakom lahko uporabimo za predpomnjenje najbolj obiskanih strani in dosežemo neverjetne rezultate.
To je nekaj pravil, ki so lahko koristna pri namestitvi Wordpressa:
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;
}
}
Lahko vidite, da v tem primeru predpomnimo vse strani z našega spletnega mesta, toda za tiste, ki imajo v URL-ju "wp-admin" ali "wp-prijava", so strune "posebne" lokacije, ki se uporabljajo za prijavo v Wordpress kot skrbnik. Tako se želimo pogovoriti neposredno s spletnim strežnikom in zaobiti predpomnilnik Varnish.
Seveda, če uporabljate Drupal, Joomla ali spletno stran po meri, morate spremeniti ta pravila, vendar je cilj vedno enak: poslati vse dinamične strani in predpomnilnik na zadnji strani.
Standard ++: Povečajte odpornost strežnika
Včasih spletni strežniki postanejo počasni, ker imajo veliko obremenitev. Lak lahko pomaga tudi pri tem. Lahko uporabimo nekaj posebnih napotkov, s katerimi lahko Varnishu preprečimo pogovore z zadnjim delom, če je navzdol ali se odziva počasi. V teh primerih Varnish uporablja direktivo "milost".
Milost v obsegu laka pomeni dostavo drugače zastarelih predmetov, ko to zahtevajo okoliščine. To se lahko zgodi, ker:
- Izbrani back-end direktor ni več
- Drugačna nit je že poslala zahtevo za zadnji del, ki še ni končan.
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
Ta konfiguracija pove Varnishu, naj preizkusi zadnji del in poviša čas mirovanja, če ima težave. Zgornji primer uvaja tudi direktivo "req.backend.healthy", ki se uporablja za preverjanje hrbtne strani. To je res uporabno, če imate več zadnjih koncev, zato si oglejmo bolj napreden primer.
Napredna uporaba: ustvarite prožen spletni strežnik v porazdeljenem okolju
To je naša končna konfiguracijska datoteka z vsemi možnostmi, ki smo jih videli do zdaj, in definicija dveh hrbtnih strani se konča z neko posebno direktivo za sondo. Tako Varnish določa, ali je spletni strežnik živ ali ne.
.url
Lak bo s tem URL-jem vnašal zahteve na zadnji strani.
.odmor
Določi, kako hitro se mora sonda končati. Določiti morate časovno enoto s številko, na primer "0, 1 s", "1230 ms" ali celo "1 h".
.interval
Kako dolgo čakati med anketami. Tu morate navesti tudi časovno enoto. Opazite, da to ni "stopnja", ampak "interval". Najnižja stopnja ankete je (.timeout + .interval).
. okno
Koliko najnovejših anket upošteva pri ugotavljanju, ali je zadnji del zdrav.
.prid
Koliko zadnjih anket mora biti dobro, da je zadnji del razglašen za zdravega.
Zdaj lahko uporabimo direktivo "req.backend.healthy" in dobimo logični rezultat, ki nam pove, ali so zadnji deli živi ali ne.
#
# 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;
}
Zmogljivo orodje
To je le nekaj primerov, s pomočjo katerih lahko začnete uporabljati lak. To orodje je resnično zmogljivo in vam lahko pomaga doseči velik dvig zmogljivosti brez nakupa več strojne opreme ali virtualnih strojev. Za mnoge skrbnike spletnih strani je to resnična korist.