Yleiskatsaus
Useimmilla verkkosivustoilla on suuri määrä sisältöä, joka pysyy muuttumattomana tai jota muutetaan harvoin julkaisun jälkeen. Ja joka kerta, kun sitä pyydetään verkkopalvelimelta, muutettiin sitä tai ei, se käsitellään uudelleen ja lähetetään asiakkaalle, mikä kuluttaa tarpeettomasti arvokkaita järjestelmäresursseja ja verkon kaistanleveyttä. Kun verkkosivustosi tai sovelluksesi suosio kasvaa, palvelimellesi kohdistuu yhä enemmän kysyntää käsitellä sisältöä, joka on staattista, vaikka onkin dynaamisesti tuotettua.
Tämä ei ole tehokasta resurssien käyttöä, ja lopulta se maksaa sinulle paljon rahaa, kun asennat lisää laitteistoja pysyäksesi kuormituksen mukana. Tämä on ollut välimuistitallennus tulee paikalle. Ei tuhlata suorittimen sykliä tai RAM-muistia käsittelemällä aiemmin käytettyä sisältöä, joka ei todennäköisesti muutu tietyn ajan kuluessa. Sen sijaan tarjoillaan esikäsiteltyä sisältöä, joka on väliaikaisesti tallennettu palvelimelle tai selaimen välimuistiin. Ja vasta kun sisältöä on muutettu tai kun tietty aika on kulunut, käsittelemme pyydetyn sisällön uudelleen.
Välimuistitallennuksen määrittäminen Apachessa
Apachessa on kolme moduulia sisällön välimuistitallennusta varten, joista yksi ottaa sen käyttöön ja loput kaksi määrittelevät, missä välimuistitallennus on – levyllä tai muistissa. Sen määrittäminen, mitä moduulia käytetään välimuistivarastoon, riippuu käytettävissä olevista laitteistoresursseista ja suorituskykyvaatimuksista.
Välimuistivarasto levyltä on hidas mutta halvempi. Muistista palveleminen on nopeaa, mutta kallista – sekä kustannuksiltaan että resurssien kulutukseltaan. Voit kuitenkin parantaa levyvälimuistin suorituskykyä sijoittamalla sen SSDFLASH-tallennustilaan perinteisen pyörivän levyn sijaan.
- Varmista, että Apache lataa cache_moduulin, tarkistamalla, että Apachen palvelimen konfigurointitiedostossa on seuraava rivi kommentoimattomana.
LoadModule cache_module modules/mod_cache.so
- Kiekkovälimuistitallennusta varten varmista, että Apache lataa disk_cache_moduulin. Etsi seuraava rivi kommentoimattomana.
LoadModule disk_cache_module modules/mod_disk_cache.so
- Lisää seuraavat rivit joko Apache-palvelimen konfigurointitiedostoon (globaalisti) tai VirtualHost-direktiivin sisälle (sovelluksen lokalisoidusti).
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-admin
CacheEnable disk / Ei välimuistitiedostojen tallentamista kiintolevylle suhteelliselle hakemistolle ”/”.
Cacheroot Asettaa välimuistin tallennushakemiston, johon kaikki välimuistiin tallennettu sisältö tallennetaan.
CacheDefaultExpire Asettaa oletusarvoisen voimassaolon päättymispäivämäärän, joka on suhteutettu alkuperäisen pyynnön päivämäärään, sekunneissa.
CacheDisable Kytkee pois käytöstä välimuistitallennuksen suhteellisille poluille vaihtoehdon jälkeen. Arkaluonteiset alueet ja ne, joita ei pitäisi välimuistiin tallentaa, tulisi lisätä tähän.
Sisällön vanhentumisen asettaminen
Välimuistiin tallentaminen vaatii vanhentumispäivämäärän, jotta se toimisi. Ilman sisällön vanhentumispäivämäärää välimuisti ei pysty määrittämään, onko sisältö vanhentunutta vai ei.
Käytä Apachen Mod_Expires
Tämän moduulin avulla voit määritellä sisällön vanhentumispäivämäärät kokonaisuutena tai yksitellen tyypin tai täsmäävän merkkijonon perusteella.
- Varmistu siitä, että moduuli ladataan Apacheen. Avaa palvelimen asetustiedosto (httpd.conf CentOS:ssa) ja etsi tämä rivi. Poista kommentti, jos se on kommentoitu pois merkillä ’#’.
LoadModule expires_module modules/mod_expires.so
- Lisää seuraavat rivit joko Apache-palvelimen konfiguraatioon, virtuaalisen isännän konfiguraatioon, hakemistodirektiiviin tai .htaccessiin riippuen siitä, mihin haluat asettaa välimuistitallennuskäytännön.
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day"</IfModule></pre>
ExpiresActive On Kytkee modin vanhenemisajat päälle.
ExpiresDefault Asettaa oletusarvoisen vanhenemisajan kaikelle sisällölle. Access plus 1 päivä asettaa vanhentumisajaksi sisällön käyttöajan + 1 päivän, eli sisältö tallennetaan välimuistiin 24 tunnin ajaksi.
- Jos haluat määrittää eri vanhentumisarvot tietyille sisältötyypeille, voit käyttää ExpiresByType-vaihtoehtoa ExpiresDefault-vaihtoehdon lisäksi tai ilman sitä. Seuraavassa on muutama esimerkki:
<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>
HTTP-otsakkeiden käyttö web-sovelluksessa
Vuosia vanhentumis- ja viimeisimmän muokkauksen päivämäärät voidaan määrittää web-sovelluksessa HTTP-otsakkeen parametrien avulla. Tämä antaa sisällön tuoreuden hallinnan kehittäjille tai sovellukselle. Miten tämä tehdään, riippuu sovelluksesta.
- HTML
Käytä Meta-tagia ja määritä sisällön ikä. Alla olevassa esimerkissä aseta välimuistiin yksityinen (vain pyytävä asiakas) ja enimmäisikään 1 tunti (3600 sekuntia).<meta http-equiv="Cache-control" content="private,max-age:3600">
- PHP
Käytä Header()-funktiota asettaaksesi sisällön iän asiakirjojen otsikkoon.header("Cache-Control: private, max-age=3600");
Välimuistiin tallentamattoman sisällön välimuistiin tallentaminen
Joskus sinun täytyy tallentaa välimuistiin sellaista sisältöä, jolle ei ole määritetty vanhenemispäivää. Kuten aiemmin mainittiin, vanhentumispäivämäärät ovat oletusarvoisesti edellytys sille, että välimuistimekanismi toimii. Voimme kuitenkin määrätä Apachen liittämään oletusarvoisen vanhentumispäivän sisältöön, jolle ei ole määritelty vanhentumispäivää, ja välimuistiin. CacheIgnoreNoLastMod mahdollistaa tämän.
- Lisää CacheIgnoreNoLastMod-vaihtoehto arvolla On paikkaan, jossa olet ottanut välimuistitallennuksen käyttöön – Apachen palvelimen konfigurointitiedostoon tai Virtual Hosts -määritystiedostoon.
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod On
Estä selaimia tallentamasta sisältöä välimuistiin
Yllämainittujen välimuistimääritysten ongelmana on, että sovelluksesi sisältö tallennetaan välimuistiin kahteen paikkaan: asiakkaaseen ja palvelimeen. Jos päivität sisältösi ja haluat, että käyttäjä näkee sen heti, hän ei välttämättä näe sitä, jos hänen paikallisesti välimuistissa oleva versionsa ei ole vanhentunut. Voit lyhentää vanhentumisaikaa, mutta tällöin saatat tuhota välimuistitallennuksen tarkoituksen kokonaan.
Ota sen sijaan välimuistitallennus täysin haltuun ottamalla se käyttöön vain palvelimella. Pakota selain hakemaan sisältö palvelimelta jokaisen pyynnön yhteydessä, mutta tarjoile esimerkiksi esikäsiteltyä Java- tai PHP-sisältöä, ellei sisältöä ole muutettu. Näin varmistetaan, että käyttäjä näkee aina uusimman version, eikä CPU-sykliä tai RAM-muistia kulu turhaan uudelleenkäsittelyyn.
- Lisää CacheIgnoreCacheControl -vaihtoehto siihen paikkaan, jossa välimuistitallennus on otettu käyttöön – Apachen palvelimen konfiguraatiotiedostoon tai virtuaalisen isäntäkoneen konfiguraatioon – arvolla On . Tämä saa Apachen sivuuttamaan selaimen sisällön päivityspyynnöt. Kaikki sisältö tarjoillaan mahdollisuuksien mukaan palvelimen välimuistista, kunnes se on vanhentunut.
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod OnCacheIgnoreCacheControl On
- Tallenna muutokset.
- Käynnistä Apache uudelleen, jotta muutokset tulevat voimaan.
WordPress ja muut sovelluskehykset
Kehykset, kuten WordPressin ja CodeIgniterin kaltaiset, ohjaavat kaiken sisällön Index.php:n kautta. Riippuen siitä, miten olet kirjoittanut mod_rewrite-sääntöjäsi, välimuistissa oleva sisältö näkyy virheellisesti. Saatat huomata, että yhden pyydetyn sivun, kategorian jne. sisältö näkyy sen sijaan, mitä oikeasti pyydettiin.
Tämän torjumiseksi meidän on varmistettava, että Apachen välimuisti huomioi index.php:n loppuun liitetyt parametrit, kun sisältöä välimuistiin tallennetaan ja vedetään. Muokkaa index.php:n uudelleenkirjoitussääntöä alla olevan esimerkin mukaisesti.
# WordPress Permalink rewritesRewriteBase /RewriteRule ^index.php$ – RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php/