Îmbunătățirea performanțelor site-urilor web prin activarea memoriei cache în Apache

Vizualizare

Majoritatea site-urilor web au cantități mari de conținut care rămâne neschimbat sau este rar modificat după publicare. Și de fiecare dată când este solicitat de la serverul web, modificat sau nu, acesta este reprocesat și transmis către client, consumând inutil resurse valoroase de sistem și lățime de bandă de rețea. Pe măsură ce site-ul dvs. web sau aplicația dvs. câștigă în popularitate, serverul dvs. va fi solicitat mai mult pentru a procesa conținut care, deși este generat dinamic, este static.

Aceasta nu este o utilizare eficientă a resurselor și va sfârși prin a vă costa în cele din urmă o mulțime de bani, pe măsură ce instalați mai mult hardware pentru a ține pasul cu sarcina. Aici intervine caching-ul. Haideți să nu irosim ciclurile CPU sau memoria RAM pentru a procesa conținutul accesat anterior și care este puțin probabil să se schimbe într-un interval de timp determinat. În schimb, vom servi conținut preprocesat, stocat temporar pe server sau în memoria cache a browserelor web. Și numai după ce conținutul a fost modificat sau după ce a trecut o anumită perioadă de timp vom reprelucra conținutul solicitat.

Configurarea cache-ului în Apache

Apache vine cu trei module pentru cache-ul conținutului, unul îl activează, iar celelalte două determină unde există stocul de cache – pe disc sau în memorie. Determinarea modulului pe care să îl folosiți pentru memoria cache depinde de resursele hardware disponibile și de cerințele de performanță.

Servirea de pe disc este lentă, dar mai puțin costisitoare. Servirea din memorie este rapidă, dar costisitoare – atât din punct de vedere al costurilor, cât și al consumului de resurse. Cu toate acestea, puteți crește performanțele cache-ului de pe disc plasându-l pe o memorie SSDFLASH în loc de un disc convențional rotativ.

  1. Asigurați-vă că modulul cache_module este încărcat de Apache, verificând existența următoarei linii în fișierul de configurare a serverului Apache, necomentată.
    LoadModule cache_module modules/mod_cache.so
  2. Pentru cache-ul de pe disc, asigurați-vă că modulul disk_cache_module este încărcat de Apache. Căutați următoarea linie, necomentată.
    LoadModule disk_cache_module modules/mod_disk_cache.so
  3. Adaugați următoarele linii fie în fișierul de configurare a serverului Apache (pentru global), fie în interiorul unei directive VirtualHost (aplicație localizată).
    CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-admin

    CacheEnable disk /

    Unable caching to disk for relative directory „/”.

    Cacheroot

    Stabilește directorul de stocare a cache-ului, unde va fi salvat tot conținutul cache-ului.

    CacheDefaultExpire

    Stabilește data de expirare implicită, în raport cu data solicitării originale, în secunde.

    CacheDisable

    Dezactivează cache-ul pentru căile relative care urmează opțiunea. Zonele sensibile și cele care nu ar trebui să fie puse în cache ar trebui adăugate aici.

Setting Content Expiration

Caching necesită o dată de expirare pentru a funcționa. Fără o dată de expirare a conținutului dumneavoastră, memoria cache nu poate determina dacă acesta este vechi sau nu.

Utilizați modulul Mod_Expires de la Apache

Acest modul vă permite să definiți datele de expirare pentru conținutul dumneavoastră, ca întreg sau individual, pe baza tipului sau a șirului corespunzător.

  1. Asigurați-vă că modulul este încărcat în Apache. Deschideți fișierul de configurare a serverului (httpd.conf în CentOS) și căutați această linie. Decomentați-o, dacă este comentată cu un ‘#’.
    LoadModule expires_module modules/mod_expires.so
  2. Adaugați următoarele linii fie în configurația serverului Apache, fie în configurația unei gazde virtuale, fie într-o directivă de director sau .htaccess, în funcție de locul unde doriți să setați politica de caching.
    <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day"</IfModule></pre>

    ExpiresActive On

    Activează mod expires.

    ExpiresDefault

    Setează data de expirare implicită pentru tot conținutul. Acces plus 1 zi setează data de expirare la ora de acces a conținutului + 1 zi, ceea ce înseamnă că acesta va fi pus în cache timp de 24 de ore.

  3. Dacă doriți să atribuiți valori de expirare diferite unor tipuri de conținut specifice, puteți utiliza opțiunea ExpiresByType, în plus sau fără opțiunea ExpiresDefault. Iată câteva exemple:
    <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day" ExpiresByType image/jpg "access plus 5 days" ExpiresByType image/jpeg "access plus 5 days" ExpiresByType image/gif "access plus 5 days" ExpiresByType image/png "access plus 5 days" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year"</IfModule>

Utilizarea antetelor HTTP în aplicația web

Datele de expirare și de ultimă modificare pot fi definite de aplicația web utilizând parametrii antetelor HTTP. Acest lucru oferă control asupra prospețimii conținutului dezvoltatorilor sau aplicației. Modul în care faceți acest lucru depinde de aplicația dumneavoastră.

  • HTML
    Utilizați tag-ul Meta și definiți vârsta conținutului. În exemplul de mai jos, setați cache-ul la privat (numai clientul solicitant) și vârsta maximă la 1 oră (3600 de secunde).
    <meta http-equiv="Cache-control" content="private,max-age:3600">
  • PHP
    Utilizați funcția Header() pentru a seta vârsta conținutului în antetul documentelor.
    header("Cache-Control: private, max-age=3600");

Cache Non-Expiring Content

Câteodată aveți nevoie să memorați în cache conținutul care nu are o dată de expirare stabilită. După cum am menționat anterior, datele de expirare sunt o cerință pentru ca mecanismul de cache să funcționeze, în mod implicit. Cu toate acestea, putem instrui Apache să adauge o dată de expirare implicită la conținuturile care nu au o dată de expirare definită și să le pună în cache. Opțiunea CacheIgnoreNoLastMod ne permite să facem acest lucru.

  1. Adaugați opțiunea CacheIgnoreNoLastMod cu valoarea On în locația în care ați activat memoria cache – fișierul de configurare a serverului Apache sau un fișier de configurare Virtual Hosts.
    CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod On

Împiedicați browserele să pună în cache conținutul

Problema cu configurațiile de cache de mai sus este că conținutul aplicației dvs. este pus în cache în două locații: pe client și pe server. Dacă vă actualizați conținutul și doriți ca utilizatorul să îl vadă imediat, este posibil ca acesta să nu poată face acest lucru dacă varianta de cache locală nu a expirat. Puteți scurta timpul de expirare, dar atunci s-ar putea să înfrângeți complet scopul memoriei cache.

În schimb, preluați controlul total al memoriei cache, activând-o doar pe server. Forțați browserul web să obțină conținutul de pe server pentru fiecare solicitare, dar serviți conținut Java sau PHP preprocesat, de exemplu, cu excepția cazului în care conținutul a fost modificat. Acest lucru asigură că utilizatorul vede întotdeauna cea mai recentă versiune, în timp ce nu irosește inutil cicluri CPU sau RAM reprocesând inutil.

  1. Adaugați opțiunea CacheIgnoreCacheControl la locația au caching activat – fișierul de configurare a serverului Apache sau configurația unei gazde virtuale – cu o valoare de On . Acest lucru face ca Apache să ignore cererile de reîmprospătare a conținutului browserului. Tot conținutul va fi servit din memoria cache a serverului, acolo unde este posibil, până când aceasta a expirat.
    CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod OnCacheIgnoreCacheControl On
  2. Salvați modificările.
  3. Reporniți Apache pentru a aplica modificările.

WordPress și alte cadre de aplicații

Cadrele, cum ar fi cel al WordPress și cele similare cu CodeIgniter, direcționează tot conținutul prin Index.php. În funcție de modul în care v-ați scris regulile mod_rewrite, conținutul memorat în cache va fi afișat incorect. Este posibil să constatați că conținutul pentru o pagină, o categorie etc. solicitată apare în locul a ceea ce a fost solicitat de fapt.

Pentru a combate acest lucru, trebuie să ne asigurăm că memoria cache a lui Apache ia în considerare parametrii adăugați la sfârșitul index.php atunci când conținutul este pus în memoria cache și extras. Modificați regula Rewrite pentru index.php, așa cum se vede în exemplul de mai jos.

# WordPress Permalink rewritesRewriteBase /RewriteRule ^index.php$ – RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php/ 

.

Lasă un comentariu