Cum se configurează Apache Content Caching pe Ubuntu 14.04

Ce este Caching?

Caching este o metodă de îmbunătățire a performanțelor serverului, permițând stocarea temporară a conținutului solicitat în mod obișnuit într-un mod care permite un acces mai rapid. Acest lucru accelerează procesarea și livrarea prin eliminarea unor operații care necesită multe resurse.

Prin crearea unor reguli eficiente de caching, conținutul care este potrivit pentru caching va fi stocat pentru a îmbunătăți timpii de răspuns, a conserva resursele și a minimiza sarcina. Apache oferă o varietate de cache-uri potrivite pentru accelerarea diferitelor tipuri de operațiuni. În acest ghid, vom discuta despre cum să configurăm Apache 2.4 pe Ubuntu 14.04 folosind diferitele sale module de caching.

Pentru a afla mai multe despre dezvoltarea strategiilor generale de caching, consultați acest articol.

O introducere în Caching în Apache

Apache poate pune în cache conținut cu diferite niveluri de sofisticare și scalabilitate. Proiectul le împarte în trei grupe în funcție de metoda prin care conținutul este pus în cache. Defalcarea generală este:

  • File Caching: Cea mai de bază strategie de cache, aceasta pur și simplu deschide fișiere sau descriptori de fișiere la pornirea serverului și le păstrează disponibile pentru a accelera accesul.
  • Key-Value Caching: Folosită în principal pentru SSL și autentificare, key-value caching folosește un model de obiect partajat care poate stoca elemente care sunt costisitoare pentru a fi calculate în mod repetat.
  • Standard HTTP caching: Cel mai flexibil și în general util mecanism de caching, acest sistem cu trei stări poate stoca răspunsuri și le poate valida atunci când acestea expiră. Acesta poate fi configurat pentru performanță sau flexibilitate, în funcție de nevoile dvs. specifice.

O privire rapidă asupra descrierilor de mai sus poate dezvălui că metodele de mai sus au unele suprapuneri, dar și că poate fi util să folosiți mai multe strategii în același timp. De exemplu, utilizarea unei memorii de tip key-value store pentru sesiunile SSL și activarea unui cache HTTP standard pentru răspunsuri v-ar putea permite să ușurați semnificativ sarcina surselor de date și să accelerați multe operațiuni de livrare de conținut pentru clienții dumneavoastră.

Acum că aveți o înțelegere generală a fiecăruia dintre mecanismele de cache ale Apache, să analizăm aceste sisteme mai în detaliu.

File Caching

General Overview

  • Modulele principale implicate: mod_file_cache
  • Principalele cazuri de utilizare: stocarea fie a conținutului fișierelor, fie a descriptorilor de fișiere la pornirea serverului. Acestea sunt reprezentări statice care nu pot fi modificate în mod fiabil până când serverul nu este repornit.
  • Caracteristici: simplu, îmbunătățește performanța sistemelor de fișiere lente
  • Dezavantaje: caracteristică experimentală, nu răspunde la actualizările din sistemul de fișiere, trebuie utilizat cu moderație pentru a se încadra în limitările sistemului de operare, poate fi utilizat numai pe fișiere statice

Detalii

Modul mod_file_cache este utilizat în principal pentru a accelera accesul la fișiere pe serverele cu sisteme de fișiere lente. Acesta oferă posibilitatea de a alege între două directive de configurare, ambele având ca scop accelerarea procesului de servire a fișierelor statice prin efectuarea unei părți din muncă atunci când serverul este pornit și nu atunci când fișierele sunt solicitate.

Directiva CacheFile este utilizată pentru a specifica calea către fișierele de pe disc la care doriți să accelerați accesul. Atunci când Apache este pornit, Apache va deschide fișierele statice care au fost specificate și va memora în cache mânerul fișierului, evitând necesitatea de a deschide fișierul atunci când acesta este solicitat. Numărul de fișiere care pot fi deschise în acest mod este supus limitărilor stabilite de sistemul dumneavoastră de operare.

Directiva MMapFile deschide, de asemenea, fișiere la prima pornire a Apache. Cu toate acestea, MMapFile stochează conținutul fișierului în memorie, mai degrabă decât doar gestionarul de fișiere. Acest lucru permite o performanță mai rapidă pentru acele pagini, dar are câteva limitări serioase. Nu păstrează nicio evidență a cantității de memorie pe care a folosit-o, astfel încât este posibil să rămână fără memorie. De asemenea, rețineți că procesele copil vor copia orice parte din memoria alocată, ceea ce poate duce la o epuizare mai rapidă a resurselor decât ați putea anticipa inițial. Folosiți această directivă numai cu moderație.

Aceste directive sunt evaluate numai la pornirea Apache. Acest lucru înseamnă că nu vă puteți baza pe Apache pentru a prelua modificările făcute după ce a pornit. Folosiți-le numai în cazul fișierelor statice care nu se vor modifica pe durata de viață a sesiunii Apache. În funcție de modul în care sunt modificate fișierele, serverul poate fi notificat de modificări, dar acesta nu este un comportament așteptat și nu va funcționa întotdeauna corect. Dacă trebuie făcute modificări la fișierele transmise acestor directive, reporniți Apache după ce au fost făcute modificările.

Cum să activați memorarea în cache a fișierelor

Modulul mod_file_cache asigură memorarea în cache a fișierelor. Pentru a utiliza această funcționalitate, va trebui să activați modulul.

Când utilizați Ubuntu 14.04, modulul va fi instalat, dar dezactivat atunci când instalați Apache. Puteți activa modulul tastând:

  • sudo a2enmod file_cache

După aceea, trebuie să editați fișierul principal de configurare pentru a seta directivele de memorare în cache a fișierelor. Deschideți fișierul tastând:

  • sudo nano /etc/apache2/apache2.conf

Pentru a configura memorarea în cache a mânuirii fișierelor, utilizați directiva CacheFile. Această directivă primește o listă de căi de acces la fișiere, separate prin spații, astfel:

/etc/apache2/apache2.conf
CacheFile /var/www/html/index.html /var/www/html/somefile.index

Când serverul este repornit, Apache va deschide fișierele listate și va stoca manierele lor de fișiere în memoria cache pentru un acces mai rapid.

Dacă, în schimb, doriți să mapezi câteva fișiere direct în memorie, puteți folosi directiva MMapFile. Sintaxa acesteia este practic aceeași ca și cea a ultimei directive, în sensul că primește pur și simplu o listă de căi de acces la fișiere:

/etc/apache2/apache2.conf
MMapFile /var/www/html/index.html /var/www/html/somefile.index

În practică, nu ar exista niciun motiv pentru a configura atât CacheFile cât și MMapFile pentru același set de fișiere, dar le puteți folosi pe amândouă pentru seturi diferite de fișiere.

Când ați terminat, puteți salva și închide fișierele. Verificați sintaxa fișierului de configurare tastând:

  • sudo apachectl configtest

Dacă pe ultima linie se citește Syntax OK, puteți reporni în siguranță instanța Apache:

  • sudo service apache2 restart

Apache va reporni, punând în cache conținutul fișierelor sau gestionarii în funcție de directivele pe care le-ați folosit.

Key-Value Caching

General Overview

  • Modulele principale implicate: , mod_socache_dc, mod_socache_memcache, mod_socache_shmcb
  • Module de suport implicate: mod_authn_socache, mod_ssl
  • Cazuri principale de utilizare: stocarea sesiunilor SSL sau a detaliilor de autentificare, capsulare SSL
  • Caracteristici: memoria cache cu obiecte partajate pentru a stoca resurse complexe, poate ajuta la memorarea în memoria cache a sesiunilor SSL și la capsulare, backend-uri flexibile
  • Dezavantaje: nu are mecanisme de validare, trebuie configurat un software separat pentru backend-uri mai performante/flexibile, unele bug-uri în cod

Detalii

Cahingul cu valori cheie este mai complex decât cache-ul de fișiere și are beneficii mai concentrate. Cunoscută și sub numele de memoria cache cu obiecte partajate, memoria cache cu valoare de cheie a Apache este utilizată în principal pentru a evita repetarea operațiilor costisitoare implicate de configurarea accesului unui client la conținut, spre deosebire de conținutul în sine. În mod specific, poate fi utilizată pentru a stoca în memoria cache detalii de autentificare, sesiuni SSL și pentru a oferi capsare SSL.

Nota

În prezent, există unele probleme cu fiecare furnizor de cache cu obiecte partajate. Referințele la aceste probleme vor fi prezentate mai jos. Luați-le în considerare atunci când evaluați dacă să activați sau nu această caracteristică.

Cașca efectivă se realizează prin utilizarea unuia dintre modulele furnizorului de cache pentru obiecte partajate. Acestea sunt:

  • mod_socache_dbm: Acest backend utilizează motorul simplu de baze de date dbm, care este un magazin de valori cheie bazat pe fișiere care utilizează hashing și bucket-uri de mărime fixă. Acest furnizor suferă de unele scurgeri de memorie, așa că, pentru majoritatea cazurilor, se recomandă să se utilizeze în schimb mod_socache_shmcb.
  • mod_socache_dc: Acest furnizor utilizează software-ul de cache de sesiune distcache. Acest proiect nu a mai fost actualizat din 2004 și nici măcar nu este împachetat pentru unele distribuții, așa că utilizați-l cu o doză sănătoasă de prudență.
  • mod_socache_memcache: Acesta utilizează memoria cache cu obiecte de memorie distribuită memcache pentru stocarea elementelor. Aceasta este cea mai bună opțiune pentru un cache distribuit între mai multe servere. În prezent, nu expiră corect intrările, dar a fost trimis un patch în trunchiul de control al versiunilor Apache care rezolvă problema.
  • mod_socache_shmcb: În prezent, aceasta este cea mai bună opțiune pentru memoria cache cu valoare de cheie. Aceasta face cache pe un buffer ciclic în memoria partajată, care va elimina intrările pe măsură ce devine plin. În prezent, se blochează la intrările cu o dimensiune mai mare de 11k.

Pe lângă modulele furnizor de mai sus, vor fi necesare module suplimentare în funcție de obiectele puse în cache. De exemplu, pentru a pune în cache sesiunile SSL sau pentru a configura capsarea SSL, trebuie activat mod_ssl, care va furniza directivele SSLSessionCache și, respectiv, SSLStaplingCache. În mod similar, pentru a configura memoria cache de autentificare, trebuie activat modulul mod_authn_socache, astfel încât să poată fi setată directiva AuthnCacheSOCache.

Cum să activați memoria cache cu valoare cheie

Cu toate aceste erori și avertismente de mai sus, dacă doriți totuși să configurați acest tip de memorie cache în Apache, urmați instrucțiunile de mai jos.

Metoda folosită pentru a configura memoria cache cu valoare cheie va depinde de scopul pentru care va fi folosită și de furnizorul pe care îl folosiți. Vom trece în revistă mai jos elementele de bază atât ale cache-ului de autentificare, cât și ale cache-ului de sesiune SSL.

În prezent, există o eroare cu cache-ul de autentificare care împiedică transmiterea de argumente către furnizorul de cache. Așadar, orice furnizor care nu oferă setări implicite pe care să se bazeze va avea probleme.

Cahing de autentificare

Cahing de autentificare este util dacă folosiți o metodă de autentificare costisitoare, cum ar fi LDAP sau autentificarea prin baze de date. Aceste tipuri de operațiuni pot avea un impact semnificativ asupra performanței dacă backend-ul trebuie să fie lovit de fiecare dată când se face o cerere de autentificare.

Stabilirea caching-ului implică modificarea configurației de autentificare existente (nu vom acoperi modul de configurare a autentificării în acest ghid). Modificările în sine vor fi cam aceleași, indiferent de metoda de autentificare a backend-ului. Vom folosi mod_socache_shmcb pentru demonstrația noastră.

În primul rând, activați modulul authn_socache și modulul furnizor mod_socache_shmcb tastând:

  • sudo a2enmod authn_socache
  • sudo a2enmod socache_shmcb

Deschideți fișierul principal de configurare Apache astfel încât să puteți specifica acest backend de cache partajat pentru utilizarea cu autentificare:

  • sudo nano /etc/apache2/apache2.conf

În interior, spre partea de sus a fișierului, adăugați directiva AuthnCacheSOCache. Specificați că shmcb trebuie să fie folosit ca furnizor. Dacă bug-ul discutat anterior care împiedică trecerea opțiunilor este rezolvat până când citiți aceste rânduri, puteți specifica o locație și o dimensiune pentru memoria cache. Numărul este în octeți, astfel încât exemplul comentat va avea ca rezultat un cache de 512 kilobiți:

/etc/apache2/apache2.conf
AuthnCacheSOCache shmcb# If the bug preventing passed arguments to the provider gets fixed,# you can customize the location and size like this#AuthnCacheSOCache shmcb:${APACHE_RUN_DIR}/auth_cache(512000)

Salvați și închideți fișierul când ați terminat.

În continuare, deschideți pagina de configurare a gazdei virtuale care are configurată autentificarea. Vom presupune că folosiți configurația gazdei virtuale 000-default.conf, dar ar trebui să o modificați pentru a reflecta mediul dumneavoastră:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

În locația în care ați configurat autentificarea, modificați blocul pentru a adăuga caching. Mai exact, trebuie să adăugați AuthnCacheProvideFor pentru a-i spune ce surse de autentificare să pună în cache, să adăugați un timp de așteptare în cache cu AuthnCacheTimeout și să adăugați socache la lista AuthBasicProvider înaintea metodei dvs. convenționale de autentificare. Rezultatele vor arăta cam așa:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> . . . <Directory /var/www/html/private> AuthType Basic AuthName "Restricted Files" AuthBasicProvider socache file AuthUserFile /etc/apache2/.htpasswd AuthnCacheProvideFor file AuthnCacheTimeout 300 Require valid-user </Directory></VirtualHost>

Exemplul de mai sus este pentru autentificarea fișierelor, care probabil nu va beneficia foarte mult de cache. Cu toate acestea, implimentarea ar trebui să fie foarte asemănătoare atunci când se folosesc alte metode de autentificare. Singura diferență substanțială ar fi acolo unde se află specificația „file” în exemplul de mai sus, în locul acesteia se va folosi cealaltă metodă de autentificare.

Salvați și închideți fișierul. Reporniți Apache pentru a pune în aplicare modificările aduse memoriei cache:

  • sudo service apache2 restart

SSL Session Caching

Handshake-ul care trebuie efectuat pentru a stabili o conexiune SSL implică o supraîncărcare semnificativă. Ca atare, punerea în cache a datelor sesiunii pentru a evita acest pas de inițializare pentru cererile ulterioare poate, potențial, să ocolească această penalizare. Memoria cache a obiectului partajat este un loc perfect pentru acest lucru.

Dacă aveți SSL deja configurat pentru serverul Apache, mod_ssl va fi activat. Pe Ubuntu, acest lucru înseamnă că un fișier ssl.conf a fost mutat în directorul /etc/apache2/mods-enabled. Acest lucru, de fapt, setează deja caching-ul. Înăuntru, veți vedea câteva linii ca acestea:

/etc/apache2/mods-enabled/ssl.conf
. . .SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)SSLSessionCacheTimeout 300. . .

Acest lucru este de fapt suficient pentru a configura memoria cache a sesiunii. Pentru a testa acest lucru, puteți utiliza clientul de conectare al OpenSSL. Type:

  • openssl s_client -connect 127.0.0.1:443 -reconnect -no_ticket | grep Session-ID

Dacă ID-ul sesiunii este același în toate rezultatele, memoria cache de sesiune funcționează corect. Apăsați CTRL-C pentru a ieși din nou în terminal.

Standard HTTP Caching

Generalități

  • Module primare implicate: mod_cache
  • Module suport implicate: mod_cache
  • Module suport implicate: mod_cache_disk, mod_cache_socache
  • Cazuri de utilizare principale: Stocarea în cache a conținutului general
  • Caracteristici: Poate interpreta corect antetele HTTP caching, poate revalida intrările vechi, poate fi implementat pentru viteză maximă sau flexibilitate în funcție de necesități
  • Dezavantaje: Poate scurge date sensibile dacă este configurat incorect, trebuie să utilizeze module suplimentare pentru a seta corect politica de memorare în cache

Detalii

Protocolul HTTP încurajează și oferă mecanisme de memorare în cache a răspunsurilor de-a lungul întregului traseu de livrare a conținutului. Orice calculator care atinge conținutul poate, potențial, să pună în cache fiecare element pentru o anumită perioadă de timp, în funcție de politicile de caching stabilite la originea conținutului și de propriile reguli de caching ale calculatorului.

Mecanismul de caching HTTP Apache pune în cache răspunsurile în funcție de politicile de caching HTTP pe care le vede. Acesta este un sistem de caching de uz general care respectă aceleași reguli pe care le-ar urma orice server intermediar care are un rol în livrare. Acest lucru face ca acest sistem să fie foarte flexibil și puternic și vă permite să valorificați anteturile pe care ar trebui să le setați deja pe conținutul dvs. (vom vedea mai jos cum se face acest lucru).

Cahera HTTP a lui Apache este cunoscută și sub numele de cache cu „trei stări”. Acest lucru se datorează faptului că conținutul pe care l-a stocat poate fi într-una din cele trei stări. Poate fi proaspăt, ceea ce înseamnă că i se permite să fie servit clienților fără alte verificări, poate fi vechi, ceea ce înseamnă că TTL al conținutului a expirat, sau poate fi inexistent dacă conținutul nu se găsește în memoria cache.

Dacă conținutul devine vechi, la următoarea cerere, memoria cache îl poate revalida prin verificarea conținutului la origine. Dacă acesta nu s-a schimbat, poate reseta data de prospețime și poate servi conținutul actual. În caz contrar, extrage conținutul modificat și îl stochează pentru perioada de timp permisă de politica sa de memorare în cache.

Prezentare generală a modulului

Logica de memorare în cache HTTP este disponibilă prin intermediul modulului mod_cache. Memorizarea efectivă se face cu ajutorul unuia dintre furnizorii de memorie cache. De obicei, memoria cache este stocată pe disc folosind modulul mod_cache_disk, dar memoria cache a obiectelor partajate este, de asemenea, disponibilă prin modulul mod_cache_socache.

Modul mod_cache_disk realizează memoria cache pe disc, astfel încât poate fi utilă în cazul în care trimiteți prin proxy conținut dintr-o locație îndepărtată, îl generați dintr-un proces dinamic sau pur și simplu încercați să accelerați lucrurile prin realizarea memoriei cache pe un disc mai rapid decât cel pe care se află în mod obișnuit conținutul dumneavoastră. Acesta este cel mai bine testat furnizor și, probabil, ar trebui să fie prima dvs. alegere în majoritatea cazurilor. Memoria cache nu este curățată în mod automat, astfel încât un instrument numit htcacheclean trebuie să fie rulat ocazional pentru a micșora memoria cache. Acesta poate fi rulat manual, setat ca o lucrare obișnuită cron sau poate fi rulat ca un demon.

Modul mod_cache_socache face cache la unul dintre furnizorii de obiecte partajate (aceiași care au fost discutați în ultima secțiune). Acest modul poate avea potențial o performanță mai bună decât mod_cache_disk (în funcție de furnizorul de cache partajat selectat). Cu toate acestea, este mult mai nou și se bazează pe furnizorii de obiecte partajate, care au bug-urile discutate anterior. Se recomandă efectuarea unor teste complete înainte de a implementa opțiunea mod_cache_socache.

Plasarea cache-ului HTTP

Pache’s HTTP cache poate fi implementat în două configurații diferite, în funcție de nevoile dumneavoastră.

Dacă CacheQuickHandler este setat la „on”, cache-ul va fi verificat foarte devreme în procesul de gestionare a cererilor. Dacă se găsește conținut, acesta va fi servit direct, fără nicio altă manipulare. Acest lucru înseamnă că este incredibil de rapid, dar înseamnă, de asemenea, că nu permite procese precum autentificarea pentru conținut. Dacă există conținut în memoria cache care în mod normal necesită autentificare sau control al accesului, acesta va fi accesibil oricui fără autentificare dacă CacheQuickHandler este setat la „on”.

În principiu, acest lucru emulează un cache separat în fața serverului dvs. web. Dacă serverul dvs. web trebuie să facă orice fel de verificare condiționată, autentificare sau autorizare, acest lucru nu se va întâmpla. Apache nu va evalua nici măcar directivele din cadrul blocurilor <Location> sau <Directory>. Rețineți că CacheQuickHandler este setat la „on” în mod implicit!

Dacă CacheQuickHandler este setat la „off”, memoria cache va fi verificată semnificativ mai târziu în secvența de procesare a cererii. Gândiți-vă la această configurație ca la plasarea cache-ului între logica de procesare Apache și conținutul real. Acest lucru va permite ca directivele de procesare convenționale să fie rulate înainte de a prelua conținutul din memoria cache. Dacă setați acest lucru la „off” (dezactivat) tranzacționați un pic de viteză pentru capacitatea de a procesa cererile mai în profunzime.

Cum se configurează memoria cache HTTP standard

Pentru a activa memoria cache, va trebui să activați modulul mod_cache, precum și unul dintre furnizorii săi de memorie cache. După cum am precizat mai sus, mod_cache_disk este bine testat, așa că ne vom baza pe acesta.

Elaborarea modulelor

Pe un sistem Ubuntu, puteți activa aceste module tastând:

  • sudo a2enmod cache
  • sudo a2enmod cache_disk

Aceasta va activa funcționalitatea de cache la următoarea repornire a serverului.

De asemenea, va trebui să instalați și pachetul apache2-utils, care conține utilitarul htcacheclean utilizat pentru a reduce cache-ul atunci când este necesar. Îl puteți instala tastând:

  • sudo apt-get update
  • sudo apt-get install apache2-utils

Modificarea configurației globale

Cei mai mulți dintre parametrii de configurare pentru memoria cache vor avea loc în cadrul definițiilor gazdelor virtuale individuale sau al blocurilor de locații. Cu toate acestea, activarea mod_cache_disk activează, de asemenea, o configurație globală care poate fi utilizată pentru a specifica unele atribute generale. Deschideți acum acel fișier pentru a arunca o privire:

  • sudo nano /etc/apache2/mods-enabled/cache_disk.conf

Cu comentariile eliminate, fișierul ar trebui să arate astfel:

/etc/apache2/mods-enabled/cache_disk.conf
<IfModule mod_cache_disk.c> CacheRoot /var/cache/apache2/mod_cache_disk CacheDirLevels 2 CacheDirLength 1</IfModule>

Învelișul IfModule îi spune lui Apache să se preocupe de aceste directive doar dacă modulul mod_cache_disk este activat. Directiva CacheRoot specifică locația de pe disc unde va fi păstrat cache-ul. Atât CacheDirLevels, cât și CacheDirLength contribuie la definirea modului în care va fi construită structura directorului cache.

Un hash md5 al URL-ului care este servit va fi creat ca cheie folosită pentru a stoca datele. Datele vor fi organizate în directoare derivate din caracterele de început ale fiecărui hash. CacheDirLevels specifică numărul de subdirectoare care trebuie create și CacheDirLength specifică câte caractere trebuie folosite ca nume al fiecărui director. Astfel, un hash de b1946ac92492d2347c6235b4d2611184 cu valorile implicite prezentate mai sus va fi arhivat într-o structură de directoare de b/1/946ac92492d2347c6235b4d2611184. De obicei, nu va fi nevoie să modificați aceste valori, dar este bine să știți la ce sunt folosite.

Nota

Dacă alegeți să modificați valoareaCacheRoot, va trebui să deschideți fișierul/etc/default/apache2și să modificați valoareaHTCACHECLEAN_PATHpentru a se potrivi cu selecția dumneavoastră. Aceasta este folosită pentru a curăța memoria cache la intervale regulate, deci trebuie să aibă locația corectă a cache-ului.

Alte valori pe care le puteți seta în acest fișier sunt CacheMaxFileSize și CacheMinFileSize care stabilesc intervalele de mărime a fișierelor în bytes pe care Apache le va trimite în memoria cache, precum și CacheReadSize și CacheReadTime, care vă permit să așteptați și să puneți în buffer conținutul înainte de a-l trimite către client. Acest lucru poate fi util dacă conținutul rezidă în altă parte decât pe acest server.

Modificarea serverului virtual

Cei mai mulți dintre parametrii de configurare pentru cache se vor întâmpla la un nivel mai granular, fie în definiția gazdei virtuale, fie într-un bloc de locație specific.

Deschideți unul dintre fișierele gazdei virtuale pentru a urmări. Vom presupune că folosiți fișierul implicit în acest ghid:

  • sudo nano /etc/apache2/sites-enabled

În blocul de gazdă virtuală, în afara oricărui bloc de locație, putem începe să configurăm unele dintre proprietățile de caching. În acest ghid, vom presupune că dorim să dezactivăm CacheQuickHandler, astfel încât să se facă mai multă procesare. Acest lucru ne permite up reguli de caching mai complete.

De asemenea, vom profita de această ocazie pentru a configura blocarea cache-ului. Acesta este un sistem de blocare a fișierelor pe care Apache îl va folosi atunci când verifică cu originea conținutului pentru a vedea dacă conținutul este încă valabil. În timpul în care această interogare este satisfăcută, dacă vin cereri suplimentare pentru același conținut, ar rezulta în cereri suplimentare către resursa din backend, ceea ce ar putea cauza vârfuri de încărcare.

Stabilirea unei blocări de cache pentru o resursă în timpul validării îi spune lui Apache că resursa este în curs de reîmprospătare. În acest timp, resursa învechită poate fi servită cu un antet de avertizare care indică starea sa. Vom configura acest lucru cu un director de blocare a memoriei cache în folderul /tmp. Vom permite un maxim de 5 secunde pentru ca o blocare să fie considerată validă. Aceste exemple sunt preluate direct din documentația Apache, așa că ar trebui să funcționeze bine pentru scopurile noastre.

De asemenea, îi vom spune lui Apache să ignore anteturile Set-Cookie și să nu le stocheze în memoria cache. Făcând acest lucru, vom împiedica Apache să scurgă accidental cookie-uri specifice utilizatorului către alte părți. Antetul Set-Cookie va fi eliminat înainte ca anteturile să fie puse în cache.

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined CacheQuickHandler off CacheLock on CacheLockPath /tmp/mod_cache-lock CacheLockMaxAge 5 CacheIgnoreHeaders Set-Cookie</VirtualHost>

Încă trebuie să activăm efectiv memoria cache pentru această gazdă virtuală. Putem face acest lucru cu directiva CacheEnable. Dacă aceasta este setată într-un bloc de gazde virtuale, va trebui să furnizăm metoda de stocare în cache (disk sau socache), precum și URI-urile solicitate care ar trebui să fie stocate în cache. De exemplu, pentru a pune în cache toate răspunsurile, acest lucru ar putea fi setat la CacheEnable disk /, dar dacă doriți să puneți în cache doar răspunsurile sub URI-ul /public, ați putea seta acest lucru la CacheEnable disk /public.

Noi vom urma o cale diferită, activând cache-ul nostru în cadrul unui bloc de locație specific. Făcând acest lucru înseamnă că nu trebuie să furnizăm o cale URI pentru comanda CacheEnable. Orice URI care ar fi servit din acea locație va fi pus în cache. De asemenea, vom activa directiva CacheHeader astfel încât anteturile noastre de răspuns să indice dacă a fost sau nu folosită memoria cache pentru a servi cererea.

O altă directivă pe care o vom seta este CacheDefaultExpire astfel încât să putem seta o expirare (în secunde) dacă nici anteturile Expires și nici Last-Modified nu sunt setate pe conținut. În mod similar, vom seta CacheMaxExpire pentru a limita perioada de timp în care elementele vor fi salvate. Vom seta CacheLastModifiedFactor pentru ca Apache să poată crea o dată de expirare dacă are o dată Last-Modified, dar nu și o expirare. Factorul este înmulțit cu timpul scurs de la modificare pentru a seta o expirare rezonabilă.

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined CacheQuickHandler off CacheLock on CacheLockPath /tmp/mod_cache-lock CacheLockMaxAge 5 CacheIgnoreHeaders Set-Cookie <Location /> CacheEnable disk CacheHeader on CacheDefaultExpire 600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.5 </Location></VirtualHost>

Salvați și închideți fișierul după ce ați configurat tot ceea ce aveți nevoie.

Verificați întreaga configurație pentru erori de sintaxă, tastând:

  • sudo apachectl configtest

Dacă nu sunt raportate erori, reporniți serviciul dvs. tastând:

  • sudo service apache2 restart

Setting Expires and Caching Headers on Content

În configurația de mai sus, am configurat cache-ul HTTP, care se bazează pe antetele HTTP. Cu toate acestea, niciunul dintre conținuturile pe care le servim nu are, de fapt, anteturile Expires sau Cache-Control necesare pentru a lua decizii inteligente de cache. Pentru a seta aceste antete, trebuie să profităm de alte câteva module.

Modulul mod_expires poate seta atât antetul Expires, cât și opțiunea max-age din antetul Cache-Control. Modulul poate fi folosit pentru a adăuga opțiuni Cache-Control mai specifice pentru a regla și mai mult politica de caching.

Potem activa aceste două module tastând:

  • sudo a2enmod expires
  • sudo a2enmod headers

După activarea acestor module, putem trece direct la modificarea din nou a fișierului nostru de gazdă virtuală:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

Modul mod_expires oferă doar trei directive. Directiva ExpiresActive activează procesarea expirării într-un anumit context prin setarea acesteia la „on”. Celelalte două directive sunt foarte asemănătoare între ele. Directiva ExpiresDefault stabilește timpul de expirare implicit, iar ExpiresByType stabilește timpul de expirare în funcție de tipul MIME al conținutului. Ambele vor seta Expires și Cache-Control „max-age” la valorile corecte.

Aceste două setări pot lua două sintaxe diferite. Prima este pur și simplu „A” sau „M” urmat de un număr de secunde. Aceasta stabilește expirarea în raport cu ultima dată când conținutul a fost „accesat”, respectiv „modificat”. De exemplu, acestea două ar expira conținutul la 30 de secunde după ce a fost accesat.

ExpiresDefault A30ExpireByType text/html A30

Celealaltă sintaxă permite o configurare mai detaliată. Vă permite să folosiți alte unități decât secundele, care sunt mai ușor de calculat pentru oameni. De asemenea, utilizează cuvântul complet „acces” sau „modificare”. Întreaga configurație a expirării trebuie păstrată între ghilimele, astfel:

ExpiresDefault "modification plus 2 weeks 3 days 1 hour"ExpiresByType text/html "modification plus 2 weeks 3 days 1 hour"

Pentru scopurile noastre, vom seta doar o expirare implicită. Vom începe prin a o seta la 5 minute, astfel încât, dacă facem o greșeală în timp ce ne familiarizăm, aceasta nu va fi stocată pe computerele clienților noștri pentru o perioadă extrem de lungă de timp. Când vom fi mai încrezători în capacitatea noastră de a selecta politici adecvate pentru conținutul nostru, putem ajusta acest lucru la ceva mai agresiv:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined CacheQuickHandler off CacheLock on CacheLockPath /tmp/mod_cache-lock CacheLockMaxAge 5 CacheIgnoreHeaders Set-Cookie <Location /> CacheEnable disk CacheHeader on CacheDefaultExpire 600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.5 ExpiresActive on ExpiresDefault "access plus 5 minutes" </Location></VirtualHost>

Aceasta va seta antetul nostru Expires la cinci minute în viitor și va seta Cache-Control max-age=300. Pentru a rafina și mai mult politica noastră de caching, putem folosi directiva Header. Putem folosi opțiunea merge pentru a adăuga opțiuni suplimentare Cache-Control. Puteți apela acest lucru de mai multe ori și puteți adăuga orice politici suplimentare doriți. Consultați acest ghid pentru a vă face o idee despre politicile de caching pe care ați dori să le stabiliți pentru conținutul dvs. Pentru exemplul nostru, vom seta doar „public”, astfel încât alte cache-uri să fie sigure că li se permite să stocheze copii.

Pentru a seta ETags pentru conținutul static de pe site-ul nostru (pentru a fi folosit pentru validare), putem folosi directiva FileETag. Aceasta va funcționa pentru conținutul static. Pentru conținutul generat dinamic, aplicația dvs. va fi responsabilă pentru generarea corectă a ETags.

Utilizăm directiva pentru a seta atributele pe care Apache le va folosi pentru a calcula Etag. Acesta poate fi INode, MTime, Size sau All, în funcție de faptul dacă dorim să modificăm ETag ori de câte ori se schimbă inode al fișierului, se schimbă timpul de modificare al acestuia, se schimbă dimensiunea acestuia sau toate acestea. Puteți furniza mai mult de o valoare și puteți modifica setările moștenite în contextele copil prin precedarea noilor setări cu un + sau -. În scopul nostru, vom folosi doar „all”, astfel încât toate modificările să fie înregistrate:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined CacheQuickHandler off CacheLock on CacheLockPath /tmp/mod_cache-lock CacheLockMaxAge 5 CacheIgnoreHeaders Set-Cookie <Location /> CacheEnable disk CacheHeader on CacheDefaultExpire 600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.5 ExpiresActive on ExpiresDefault "access plus 5 minutes" Header merge Cache-Control public FileETag All </Location></VirtualHost>

Aceasta va adăuga „public” (separat prin virgulă) la orice valoare pe care o are deja Cache-Control și va include un ETag pentru conținutul nostru static.

Când ați terminat, salvați și închideți fișierul. Verificați sintaxa modificărilor dvs. tastând:

  • sudo apachectl configtest

Dacă nu au fost găsite erori, reporniți serviciul pentru a implementa politicile de caching:

  • sudo service apache2 restart

Concluzie

Configurarea caching-ului cu Apache poate părea o sarcină descurajantă datorită numărului mare de opțiuni existente. Din fericire, este ușor să începeți simplu și apoi să creșteți pe măsură ce aveți nevoie de mai multă complexitate. Majoritatea administratorilor nu vor avea nevoie de fiecare dintre tipurile de caching.

Când configurați cachingul, țineți cont de problemele specifice pe care încercați să le rezolvați pentru a evita să vă pierdeți în diferitele opțiuni de implementare. Majoritatea utilizatorilor vor beneficia de cel puțin configurarea antetului. Dacă faceți proxy sau generați conținut, setarea unui cache HTTP poate fi utilă. Memorarea în cache a obiectelor partajate este utilă pentru sarcini specifice, cum ar fi stocarea sesiunilor SSL sau a detaliilor de autentificare, dacă utilizați un furnizor backend. Memoria cache a fișierelor poate fi probabil limitată la cei cu sisteme lente.

.

Leave a Reply