Šajā rakstā mēs apspriedīsim mikrokēšošanu: kāpēc tā ir nepieciešama, kā to iestatīt un kādi slēptie riski var rasties ceļā.
Kas ir mikrokēšošana?
Mikrokēšošana — tas ir keša veids, kas pilnībā izveido lapu failus un ļauj, nevis veicot pieprasījumu uz aizmugures serveri, izsniegt jau gatavu lapu.
Galvenais šāda keša trūkums, protams, ir tas, ka lapas tiek atjaunotas ļoti reti. Bet kādi tad ir ieguvumi no šāda keša?
Apskatīsim situāciju ar vāju serveri un pietiekami ātru vietni, bet uz to nāk liels skaits pieprasījumu no robotiem. Tie noslogos gan aizmuguri, gan datu bāzi, kas novedīs pie vietnes veiktspējas samazināšanās, un tā tiks ielādēta lēnāk. Šeit palīgā nāk mikrokēšošana: mēs vienkārši izsniedzam jau gatavas lapas, nenoslogojot ne aizmuguri, ne datu bāzes serveri. Arī mikrokēšošana ļauj ielādēt lapas daudzkārt ātrāk, jo nav jāgaida atbilde no aizmugures katra pieprasījuma laikā.
Šāds kešs nav piemērots dinamiskām vietnēm un administrācijas paneļa lapām, bet, ja jums ir lapa, kuru atjaunojat, piemēram, reizi dienā, tad tas ir lielisks variants.
Tagad varam pāriet pie mikrokēšošanas iestatīšanas.
Mikrokēšošanas iestatīšana
Tam mums nepieciešama direktorija, kur tiks glabāts mūsu kešs.
Šajā rakstā tiks izmantota daļa RAM kā vieta diskā, jo tas ir efektīvāk nekā glabāt šādus failus diskā.
Vispirms izveidosim direktoriju, kur tiks glabāts mūsu kešs, mūsu gadījumā /home/cache
:
mkdir /home/cache
Piemontēsim 1 GB RAM kā vietu failiem, izmantojot komandu:
mount -t tmpfs -o size=1G tmpfs /home/cache
Un pievienosim šī apgabala montēšanu katra servera palaišanas laikā (jāievieto šī rinda failā /etc/fstab
):
tmpfs /home/cache tmpfs rw,size=1G 0 0
Tāpat iestatām drošus atļauju iestatījumus direktorijai:
chown www-data:www-data -R /home/cache
chmod 700 /home/cache
Gatavs, mēs esam sagatavojuši vietu kešam. Šī risinājuma priekšrocība ir tā, ka servera restartēšanas laikā viss kešs tiek iztīrīts.
Tagad mēs pievērsīsimies potenciālajiem slēptajiem riskiem, kas var traucēt darbu ar kešu, un dēļ kuriem tas nedarbosies, pat ja keša faili tiks izveidoti. Pirmais, kas jādara — iestatīt PHP parametru session.cache_limiter
uz public
, citādi vietnes galvenē tiks norādīts Pragma: no-cache
, kas neļaus mums izmantot un izveidot kešu pareizi.
Otrais slēptais risks — nepieciešams pievienot rindu failā .htaccess
jūsu vietnei. Ieteicams iestatīt max-age
tāpat kā pārējo kešu, lai kešs novecotu:
Header set Cache-Control "max-age=300, public"
Tagad mēs varam būt droši, ka gandrīz nekas netraucēs mums izmantot kešu. Visvairāk svarīgāko atstāšu noslēgumā, proti, Nginx iestatīšanu.
Failā /etc/nginx/nginx.conf
jāievieto šādas rindas sadaļā http
:
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
proxy_cache_valid any 5m;
proxy_cache_valid 200 5m;
proxy_cache_valid 404 15s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_lock on;
Vietnes konfigurācijas failā blokā location /
jāievieto šādas rindas:
location / {
proxy_cache global_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_key $host$request_uri;
proxy_ignore_headers "Set-Cookie";
proxy_pass http://backend;
}
ISPManager gadījumā šīs rindas jāievieto blokā location @fallback
, jo visi pieprasījumi uz aizmuguri notiek caur šo bloku.
Tagad izskaidrošu, par ko katra rinda, ko mēs pievienojām konfigurācijās, ir atbildīga:
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
- proxy_cache_path — ceļš, kur tiks glabāts kešs.
- levels=1:2 — var izmantot ne vairāk kā 3 iedziļinājumus (piemēram, 1:2:3). Cipari atbild par simbolu skaitu keša direktoriju nosaukumos, kas nepieciešams ātrai darbībai uz lēniem diskiem. Ja izmantosiet tikai
levels=1
, uz lēniem diskiem keša lietderība būs maza, jo tiks izveidots liels skaits failu. Ieteicams izmantot jau gatavu iestatījumu. - keys_zone=global_cache:100m — zonas nosaukums, uz kuru vēršas mūsu vietnes. Ja kešs ir iestatīts uz zonu
global_cache
, tas meklēs failus tieši direktorijā/home/cache
.100m
— keša nosaukumu zonas lielums. - max_size=1g — kopējais keša lielums.
- inactive=5m — laiks, kurā kešs tiek uzskatīts par aktīvu. Ja uz kešu netiek vērsta uzmanība šajā laikā, sistēma to uzskata par neaktīvu un var to dzēst.
proxy_cache_valid any 5m;
— laiks, kurā tiks glabāts kešs.any
nozīmē, ka visi HTTP kodi, izņemot atsevišķi norādītos, tiks glabāti 5 minūtes.proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
— ļauj izmantot novecojušu kešu norādītajās kļūdās.proxy_cache_lock on;
— neļauj izveidot vienādus kešus no vairākiem pieprasījumiem vienlaicīgi.proxy_cache global_cache;
— norāda, kuru keša zonu izmantos vietne.proxy_cache_key $host$request_uri;
— keša statusa pārbaude. Ja galvenē būsX-Cache-Status: HIT
, tad viss ir pareizi iestatīts. JaMISS
, tad jāmeklē iemesli.proxy_ignore_headers "Set-Cookie";
— ļauj veikt pieprasījumu, ignorējot sīkdatnes. Bez tā kešs neparādīsHIT
, jo katrs pieprasījums būs unikāls.proxy_pass http://backend;
— šeit jānorāda aizmugures servera IP un ports (piemēram,localhost:8080
, ja tiek izmantots Apache2 kā aizmugures serveris).
Keša statusu var pārbaudīt ar komandu:
curl -I http://Jūsu_vietne
Atbildē būs galvene X-Cache-Status: HIT
(vai MISS
, BYPASS
). Viss, kas nav HIT
, — ir kļūda.
Gatavs. Mēs esam iestatījuši mikrokēšošanu vietnē.
*Vietne articlesite.com izveidota īpaši šim rakstam.
Tāpat piedāvājam apsvērt citas noderīgas rakstus: