Apachen sisällön välimuistitallennuksen määrittäminen Ubuntu 14.04:ssä

Mitä välimuistitallennus on?

Välimuistitallennus on menetelmä, jolla parannetaan palvelimen suorituskykyä sallimalla usein pyydetyn sisällön väliaikainen tallentaminen tavalla, joka mahdollistaa nopeamman käytön. Tämä nopeuttaa käsittelyä ja toimitusta karsimalla joitakin resursseja vaativia toimintoja.

Tehokkaiden välimuistitallennussääntöjen luomisella tallennetaan välimuistitallennukseen soveltuvaa sisältöä vasteaikojen parantamiseksi, resurssien säästämiseksi ja kuormituksen minimoimiseksi. Apache tarjoaa erilaisia välimuisteja, jotka soveltuvat erityyppisten toimintojen nopeuttamiseen. Tässä oppaassa käsitellään Apache 2.4:n konfigurointia Ubuntu 14.04:ssä käyttäen sen eri välimuistimoduuleja.

Jos haluat lisätietoja yleisten välimuistististrategioiden kehittämisestä, tutustu tähän artikkeliin.

Esittely Apachen välimuistiinpanoon

Apache voi välimuistiinpanostaa sisällön eri tasoilla ja skaalautuvuudella. Projekti jakaa nämä kolmeen ryhmään sen mukaan, millä menetelmällä sisältöä välimuistiin tallennetaan. Yleinen jaottelu on:

  • Tiedostojen välimuistitallennus: Yksinkertaisin välimuistitallennusstrategia, joka yksinkertaisesti avaa tiedostot tai tiedoston kuvaajat palvelimen käynnistyessä ja pitää ne saatavilla nopeuttaakseen pääsyä.
  • Avainarvojen välimuistitallennus: Pääasiassa SSL:n ja todennuksen välimuistitallennuksessa käytetty avainarvojen välimuistitallennus käyttää jaettua objektimallia, johon voidaan tallentaa kohteita, joiden toistuva laskeminen on kallista.
  • Tavallinen HTTP-välimuistitallennus: Joustavin ja yleisesti käyttökelpoisin välimuistitallennusmekanismi, tämä kolmitilajärjestelmä pystyy tallentamaan vastauksia ja validoimaan ne, kun niiden voimassaolo päättyy. Tämä voidaan konfiguroida suorituskykyä tai joustavuutta varten erityistarpeiden mukaan.

Ylläolevien kuvausten nopea tarkastelu saattaa paljastaa, että edellä mainituilla menetelmillä on jonkin verran päällekkäisyyttä, mutta myös sen, että voi olla hyödyllistä käyttää useampaa kuin yhtä strategiaa yhtä aikaa. Esimerkiksi käyttämällä avainarvosäilöä SSL-istuntojasi varten ja ottamalla käyttöön tavallisen HTTP-välimuistin vastauksia varten voit ottaa merkittävää kuormaa pois tietolähteiltäsi ja nopeuttaa monia sisällönjakelutoimintoja asiakkaillesi.

Nyt kun sinulla on laaja käsitys jokaisesta Apachen välimuistitallennusmekanismista, tarkastellaan näitä järjestelmiä yksityiskohtaisemmin.

Tiedostojen välimuistitallennus

Yleistä yleiskatsausta

  • Pääasialliset moduulit, jotka ovat mukana: mod_file_cache
  • Tärkeimmät käyttötapaukset: joko tiedostojen sisällön tai tiedoston kuvaajien tallentaminen palvelimen käynnistyessä. Nämä ovat staattisia esityksiä, joita ei voi luotettavasti muuttaa ennen kuin palvelin käynnistetään uudelleen.
  • Ominaisuudet: yksinkertainen, parantaa hitaiden tiedostojärjestelmien suorituskykyä
  • Haitat: kokeellinen ominaisuus, ei reagoi tiedostojärjestelmän päivityksiin, on käytettävä säästeliäästi, jotta se mahtuu käyttöjärjestelmän rajoitusten sisään, voidaan käyttää vain staattisiin tiedostoihin

Detaljeeraus

Moduulia mod_file_cache käytetään pääasiassa tiedostojen saatavuuden nopeuttamiseen palvelimissa, joissa on hitaat tiedostojärjestelmät. Se tarjoaa valinnan kahdesta konfiguraatiodirektiivistä, jotka molemmat pyrkivät nopeuttamaan staattisten tiedostojen palveluprosessia suorittamalla osan työstä palvelimen käynnistyessä eikä silloin, kun tiedostoja pyydetään.

Direktiiviä CacheFile käytetään määrittämään polku levyllä oleviin tiedostoihin, joiden käyttöä halutaan nopeuttaa. Kun Apache käynnistetään, Apache avaa määritetyt staattiset tiedostot ja tallentaa tiedostokahvan välimuistiin, jolloin tiedostoa ei tarvitse avata, kun sitä pyydetään. Näin avattavien tiedostojen määrä riippuu käyttöjärjestelmän asettamista rajoituksista.

MMapFileDirektiivi MMapFile avaa myös tiedostoja, kun Apache käynnistetään ensimmäisen kerran. MMapFile kuitenkin tallentaa tiedoston sisällön välimuistiin tiedoston käsittelijän sijasta. Tämä mahdollistaa nopeamman suorituskyvyn näille sivuille, mutta sillä on joitakin vakavia rajoituksia. Se ei pidä kirjaa käyttämänsä muistin määrästä, joten on mahdollista, että muisti loppuu kesken. Huomaa myös, että lapsiprosessit kopioivat kaiken varatun muistin, mikä voi johtaa resurssien nopeampaan ehtymiseen kuin aluksi oletit. Käytä tätä direktiiviä vain harvoin.

Nämä direktiivit arvioidaan vain Apachen käynnistyessä. Tämä tarkoittaa, että et voi luottaa siihen, että Apache huomioi käynnistyksen jälkeen tehdyt muutokset. Käytä näitä vain staattisiin tiedostoihin, jotka eivät muutu Apache-istunnon aikana. Riippuen siitä, miten tiedostoja muutetaan, palvelimelle saatetaan ilmoittaa muutoksista, mutta tämä ei ole odotettua käyttäytymistä, eikä se toimi aina oikein. Jos näille direktiiveille välitettäviin tiedostoihin on tehtävä muutoksia, käynnistä Apache uudelleen muutosten tekemisen jälkeen.

How To Enable File Caching

Tiedostojen välimuistitallennus on mod_file_cache-moduulin tarjoama. Jotta voit käyttää tätä toimintoa, sinun on otettava moduuli käyttöön.

Käytettäessä Ubuntu 14.04:ää moduuli on asennettu, mutta se poistetaan käytöstä Apachen asennuksen yhteydessä. Voit ottaa moduulin käyttöön kirjoittamalla:

  • sudo a2enmod file_cache

Sen jälkeen sinun on muokattava pääkonfiguraatiotiedostoa asettaaksesi tiedostojen välimuistitallennusdirektiivit. Avaa tiedosto kirjoittamalla:

  • sudo nano /etc/apache2/apache2.conf

Tiedoston kahvojen välimuistitallennuksen määrittämiseksi käytä CacheFile-direktiiviä. Tämä direktiivi ottaa vastaan listan tiedostopolkuja välilyönneillä erotettuna, esimerkiksi näin:

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

Kun palvelin käynnistetään uudelleen, Apache avaa listatut tiedostot ja tallentaa niiden tiedostokahvat välimuistiin nopeampaa käyttöä varten.

Jos sen sijaan haluat kartoittaa muutaman tiedoston suoraan muistiin, voit käyttää MMapFile-direktiiviä. Sen syntaksi on periaatteessa sama kuin edellisen direktiivin, sillä se vain ottaa vastaan listan tiedostopolkuja:

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

Käytännössä ei olisi mitään syytä konfiguroida sekä CacheFile– että MMapFile-määritystä samalle tiedostojoukolle, mutta voit käyttää molempia eri tiedostojoukkojen kohdalla.

Kun lopetat, voit tallentaa ja sulkea tiedostot. Tarkista konfiguraatiotiedoston syntaksi kirjoittamalla:

  • sudo apachectl configtest

Jos viimeisellä rivillä lukee Syntax OK, voit turvallisesti käynnistää Apache-instanssisi uudelleen:

  • sudo service apache2 restart

Apache käynnistyy uudelleen ja välimuistiin tallennetaan tiedostojen sisällöt tai käsittelijät käyttämistäsi direktiiveistä riippuen.

Key-arvojen välimuistiin tallentaminen Avainarvojen välimuistiin tallentaminen

yleiskatsausta

Yleistä

Yleiskatsausta

Pääasialliset mukana olevat moduulit: mod_socache_dbm, mod_socache_dc, mod_socache_memcache, mod_socache_shmcb

  • Mukana olevat tukimoduulit: mod_authn_socache, mod_ssl
  • Tärkeimmät käyttötapaukset: SSL-istuntojen tai autentikointitietojen tallentaminen, SSL-nidonta
  • Ominaisuudet: jaettu oliovälimuisti monimutkaisten resurssien tallentamiseen, voi auttaa SSL-istuntojen välimuistitallennuksessa ja -nidonnassa, joustavat backendit
  • Haitat:
  • Erittelyt

    Avainarvojen välimuistitallennus on monimutkaisempi kuin tiedostojen välimuistitallennus ja sillä on enemmän kohdennettuja hyötyjä. Apachen avainarvovälimuistia, joka tunnetaan myös nimellä jaettu objektivälimuisti, käytetään pääasiassa välttämään kalliiden operaatioiden toistamista, jotka liittyvät asiakkaan pääsyn määrittämiseen sisältöön, toisin kuin itse sisältöön. Erityisesti sitä voidaan käyttää autentikointitietojen ja SSL-istuntojen välimuistiin tallentamiseen sekä SSL-nippauksen tarjoamiseen.

    Huomautus

    Tällä hetkellä jokaisessa jaettujen objektien välimuistin tarjoajassa on joitakin ongelmia. Viittaukset ongelmiin hahmotellaan alla. Ota nämä huomioon, kun arvioit, haluatko ottaa tämän ominaisuuden käyttöön.

    Todellinen välimuistitallennus toteutetaan käyttämällä jotakin jaettujen objektien välimuistitallennuksen tarjoajamoduulia. Nämä ovat:

    • mod_socache_dbm: Tämä backend käyttää yksinkertaista dbm-tietokantamoottoria, joka on tiedostopohjainen avainarvosäilö, joka käyttää hashingia ja kiinteäkokoisia ämpäreitä. Tämä palveluntarjoaja kärsii joistakin muistivuodoista, joten useimmissa tapauksissa on suositeltavaa käyttää sen sijaan mod_socache_shmcb.
    • mod_socache_dc: Tämä palveluntarjoaja käyttää distcache-istunnon välimuistiohjelmistoa. Tätä projektia ei ole päivitetty vuoden 2004 jälkeen, eikä sitä ole edes pakattu joihinkin jakeluihin, joten käytä sitä terveellä annoksella varovaisuutta.
    • mod_socache_memcache: Tämä käyttää kohteiden tallentamiseen hajautetun muistin memcache-objektien välimuistia. Tämä on paras vaihtoehto hajautetulle välimuistille useiden palvelimien kesken. Tällä hetkellä se ei vanhenna merkintöjä kunnolla, mutta Apachen versiohallinnan runkoon on lähetetty korjaus, joka korjaa ongelman.
    • mod_socache_shmcb: Tällä hetkellä tämä on paras vaihtoehto avainarvojen välimuistiin tallentamiseen. Tämä tallentaa välimuistiin jaetussa muistissa olevaan sykliseen puskuriin, joka poistaa merkintöjä, kun se täyttyy. Tällä hetkellä se tukehtuu yli 11k:n kokoisiin merkintöihin.

    Yllämainittujen tarjoajamoduulien lisäksi tarvitaan lisämoduuleja riippuen välimuistiin tallennettavista objekteista. Esimerkiksi SSL-istuntojen välimuistiin tallentamiseksi tai SSL-niitännän määrittämiseksi on otettava käyttöön mod_ssl, joka tarjoaa SSLSessionCache– ja SSLStaplingCache-direktiivit. Vastaavasti autentikoinnin välimuistitallennuksen määrittämiseksi mod_authn_socache-moduulin on oltava käytössä, jotta AuthnCacheSOCache-direktiivi voidaan asettaa.

    Miten avain-arvovälimuistitallennus otetaan käyttöön

    Olennaiset viat ja varoitukset mielessä, jos haluat silti määrittää tämäntyyppisen välimuistitallennuksen Apachessa, seuraa alla olevia ohjeita.

    Menetelmä avain-arvovälimuistitallennuksen määrittämiseksi riippuu siitä, mihin tarkoitukseen välimuistitallennusta käytetään, ja siitä, mitä palveluntarjoajaa käytät. Käymme alla läpi sekä todennusvälimuistitallennuksen että SSL-istuntovälimuistitallennuksen perusteet.

    Tämän hetken todennusvälimuistitallennuksessa on virhe, joka estää argumenttien välittämisen välimuistipalveluntarjoajalle. Joten kaikilla palveluntarjoajilla, jotka eivät tarjoa oletusasetuksia, joihin turvautua, on ongelmia.

    Todennuksen välimuistiin tallentaminen

    Todennuksen välimuistiin tallentaminen on hyödyllistä, jos käytät kallista todennusmenetelmää, kuten LDAP- tai tietokantatodennusta. Tämäntyyppisillä toiminnoilla voi olla merkittävä vaikutus suorituskykyyn, jos backendiin on osuttava joka kerta, kun todennuspyyntö tehdään.

    Välimuistitallennuksen asettaminen edellyttää olemassa olevan todennuskonfiguraation muuttamista (emme käsittele todennuksen asettamista tässä oppaassa). Itse muutokset ovat pitkälti samoja riippumatta backend-todennusmenetelmästä. Käytämme demonstraatiossamme mod_socache_shmcb:

    Aluksi ota käyttöön authn_socache-moduuli ja mod_socache_shmcb-palveluntarjoajamoduuli kirjoittamalla:

    • sudo a2enmod authn_socache
    • sudo a2enmod socache_shmcb

    Avaa Apachen pääkonfiguraatiotiedosto niin, että voit määrittää tämän jaetun välimuistitiedoston (shared cache backend) käytettäväksi autentikoinnin kanssa:

    • sudo nano /etc/apache2/apache2.conf

    Sisään, tiedoston yläosaan, lisää AuthnCacheSOCache-direktiivi. Määritä, että palveluntarjoajana käytetään shmcb. Jos aiemmin käsitelty optioiden välittämisen estävä vika on korjattu tätä lukiessasi, voit määrittää välimuistin sijainnin ja koon. Luku on tavuina, joten kommentoidun esimerkin tuloksena on 512 kilotavun välimuisti:

    /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)

    Tallenna ja sulje tiedosto, kun olet valmis.

    Avaa seuraavaksi virtuaalisen isäntäkoneen konfigurointisivusi, johon on määritetty todennus. Oletamme, että käytät 000-default.conf-virtuaali-isännän konfiguraatiota, mutta sinun on muutettava sitä vastaamaan ympäristöäsi:

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

    Muuta lohkoa, jossa olet määrittänyt todennuksen, lisäämällä siihen välimuistitallennus. Erityisesti sinun on lisättävä AuthnCacheProvideFor kertoaksesi, mitkä todennuslähteet välimuistiin tallennetaan, lisättävä välimuistin aikakatkaisu AuthnCacheTimeout:llä ja lisättävä socache AuthBasicProvider-luetteloon perinteisen todennusmenetelmäsi edelle. Tulokset näyttävät jotakuinkin tältä:

    /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>

    Yllä oleva esimerkki koskee tiedostojen todennusta, joka ei luultavasti hyödy välimuistista kovin paljon. Toteutuksen pitäisi kuitenkin olla hyvin samanlainen, kun käytetään muita todennusmenetelmiä. Ainoa merkittävä ero olisi se, että jos ”tiedosto”-määrittely on yllä olevassa esimerkissä, käytettäisiin sen sijaan muuta todennusmenetelmää.

    Tallenna ja sulje tiedosto. Käynnistä Apache uudelleen ottaaksesi välimuistiin tehdyt muutokset käyttöön:

    • sudo service apache2 restart

    SSL-istuntojen välimuistiin tallentaminen

    S SSL-yhteyden muodostamiseksi suoritettava kättely aiheuttaa huomattavia yleiskustannuksia. Sinänsä istuntotietojen välimuistiin tallentaminen tämän alustusvaiheen välttämiseksi myöhemmissä pyynnöissä voi mahdollisesti ohittaa tämän seuraamuksen. Jaettujen objektien välimuisti on täydellinen paikka tähän.

    Jos SSL on jo määritetty Apache-palvelimelle, mod_ssl on käytössä. Ubuntussa tämä tarkoittaa, että ssl.conf-tiedosto on siirretty /etc/apache2/mods-enabled-hakemistoon. Tämä itse asiassa jo asettaa välimuistitallennuksen. Sen sisällä näet joitakin tämänkaltaisia rivejä:

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

    Tämä itse asiassa riittää istuntojen välimuistitallennuksen asettamiseen. Voit testata tätä käyttämällä OpenSSL:n yhteysasiakasta. Kirjoita:

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

    Jos istunnon ID on sama kaikissa tuloksissa, istunnon välimuisti toimii oikein. Paina CTRL-C poistuaksesi takaisin päätelaitteeseen.

    Standardi HTTP-välimuistitallennus

    Yleinen yleiskatsaus

    • Mukana olevat päämoduulit: mod_cache
    • Mukana olevat tukimoduulit: mod_cache_disk, mod_cache_socache
    • Tärkeimmät käyttötapaukset:
    • Ominaisuudet:
    • Haitat: Osaa tulkita HTTP-välimuistioinnin otsakkeet oikein, voi tarkistaa vanhentuneet merkinnät uudelleen, voidaan ottaa käyttöön maksimaalista nopeutta tai joustavuutta varten tarpeiden mukaan
    • Huonot puolet: HTTP-protokolla kannustaa ja tarjoaa mekanismeja vastausten välimuistiin tallentamiseen pitkin sisällön toimitusreittiä. Jokainen tietokone, joka koskettaa sisältöä, voi mahdollisesti välimuistioida kutakin kohdetta tietyn ajan riippuen sisällön alkuperässä määritetyistä välimuistikäytännöistä ja tietokoneen omista välimuistisäännöistä.

      Apachen HTTP-välimuistiointimekanismi välimuistioi vastauksia näkemiensä HTTP-välimuistikäytäntöjen mukaisesti. Kyseessä on yleiskäyttöinen välimuistitallennusjärjestelmä, joka noudattaa samoja sääntöjä kuin mikä tahansa välityspalvelin, jolla on osuutta toimitukseen. Tämä tekee tästä järjestelmästä erittäin joustavan ja tehokkaan, ja sen avulla voit hyödyntää otsikoita, jotka sinun pitäisi jo asettaa sisällöllesi (käsittelemme tämän tekemistä jäljempänä).

      Apachen HTTP-välimuisti tunnetaan myös nimellä ”kolmen tilan” välimuisti. Tämä johtuu siitä, että sen tallentama sisältö voi olla yhdessä kolmesta tilasta. Se voi olla tuoretta, mikä tarkoittaa, että se voidaan tarjoilla asiakkaille ilman lisätarkistuksia, se voi olla vanhentunutta, mikä tarkoittaa, että sisällön TTL-aika on umpeutunut, tai se voi olla olematonta, jos sisältöä ei löydy välimuistista.

      Jos sisällöstä tulee vanhentunutta, seuraavassa pyynnössä välimuisti voi tarkistaa sen uudelleen tarkistamalla sisällön alkuperästä. Jos se ei ole muuttunut, se voi nollata tuoreuden päivämäärän ja tarjota nykyistä sisältöä. Muussa tapauksessa se hakee muuttuneen sisällön ja säilyttää sen välimuistikäytännön salliman ajan.

      Moduulin yleiskatsaus

      HTTP-välimuistilogiikka on käytettävissä mod_cache-moduulin kautta. Varsinainen välimuistiin tallentaminen tapahtuu jonkin välimuistiin tallentavan palveluntarjoajan avulla. Tyypillisesti välimuisti tallennetaan levylle mod_cache_disk-moduulin avulla, mutta jaettujen objektien välimuisti on käytettävissä myös mod_cache_socache-moduulin avulla.

      mod_cache_disk-moduuli tallentaa välimuistin levylle, joten se voi olla hyödyllinen, jos välität sisältöä etäältä, tuotat sen dynaamisesta prosessista tai yrität vain nopeuttaa asioita tallentamalla sen välimuistiin nopeammalle levylle kuin mitä sisältösi tyypillisesti käyttää. Tämä on parhaiten testattu palveluntarjoaja, ja sen pitäisi todennäköisesti olla ensimmäinen valintasi useimmissa tapauksissa. Välimuistia ei puhdisteta automaattisesti, joten htcacheclean-niminen työkalu on ajettava ajoittain välimuistin pienentämiseksi. Tämä voidaan ajaa manuaalisesti, asettaa tavalliseksi cron-työksi tai ajaa daemonina.

      mod_cache_socache-moduuli käyttää välimuistia johonkin jaettujen objektien palveluntarjoajiin (samoihin, joita käsiteltiin edellisessä kappaleessa). Tämä voi mahdollisesti olla suorituskyvyltään parempi kuin mod_cache_disk (riippuen siitä, mikä jaetun välimuistin tarjoaja on valittu). Se on kuitenkin paljon uudempi ja luottaa jaettujen objektien tarjoajiin, joissa on aiemmin käsiteltyjä vikoja. Kattavaa testausta suositellaan ennen mod_cache_socache-vaihtoehdon käyttöönottoa.

      HTTP-välimuistin sijoittaminen

      Apachen HTTP-välimuisti voidaan ottaa käyttöön kahdella eri kokoonpanolla tarpeiden mukaan.

      Jos CacheQuickHandler-asetuksena on ”on”, välimuisti tarkistetaan hyvin varhaisessa vaiheessa pyyntöjen käsittelyprosessia. Jos sisältöä löytyy, se tarjoillaan suoraan ilman jatkokäsittelyä. Tämä tarkoittaa, että se on uskomattoman nopea, mutta se tarkoittaa myös sitä, että se ei salli prosesseja, kuten sisällön todentamista. Jos välimuistissasi on sisältöä, joka normaalisti edellyttää todennusta tai pääsynvalvontaa, se on kenen tahansa käytettävissä ilman todennusta, jos CacheQuickHandler on asetettu arvoon ”on”.

      Periaatteessa tämä emuloi erillistä välimuistia verkkopalvelimesi edessä. Jos web-palvelimesi tarvitsee tehdä minkäänlaista ehdollista tarkistusta, todennusta tai valtuutusta, tämä ei tapahdu. Apache ei edes arvioi direktiivejä <Location>– tai <Directory>-lohkojen sisällä. Huomaa, että CacheQuickHandler on oletusarvoisesti asetettu tilaan ”on”!

      Jos CacheQuickHandler on asetettu tilaan ”off”, välimuisti tarkistetaan huomattavasti myöhemmin pyynnön käsittelyjärjestyksessä. Ajattele, että tämä asetus sijoittaa välimuistin Apachen käsittelylogiikan ja varsinaisen sisällön väliin. Näin tavanomaiset käsittelydirektiivit voidaan ajaa ennen sisällön hakemista välimuistista. Tämän asetuksen asettaminen ”pois päältä” vaihtaa hieman nopeutta kykyyn käsitellä pyyntöjä syvällisemmin.

      How To Configure Standard HTTP Caching

      Valmiiksi ottamiseksi välimuistiin sinun täytyy ottaa käyttöön mod_cache-moduuli sekä jokin sen välimuistipalveluntarjoajista. Kuten edellä totesimme, mod_cache_disk on hyvin testattu, joten luotamme siihen.

      Moduulien ottaminen käyttöön

      Ubuntu-järjestelmässä voit ottaa nämä moduulit käyttöön kirjoittamalla:

      • sudo a2enmod cache
      • sudo a2enmod cache_disk

      Tämä ottaa välimuistitallennustoiminnot käyttöön seuraavan kerran, kun palvelin käynnistetään uudelleen.

      Tarvitset myös apache2-utils-paketin, joka sisältää htcacheclean-apuohjelman, jota käytetään välimuistin karsimiseen tarvittaessa. Voit asentaa sen kirjoittamalla:

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

      Globaalin konfiguraation muokkaaminen

      Suurin osa välimuistitallennuksen konfiguraatiosta tapahtuu yksittäisten virtuaalisten isäntien määritelmissä tai sijaintilohkoissa. mod_cache_disk:n ottaminen käyttöön ottaa kuitenkin käyttöön myös globaalin konfiguraation, jota voidaan käyttää joidenkin yleisten ominaisuuksien määrittämiseen. Avaa tuo tiedosto nyt katsomaan:

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

      Kommenttien poistamisen jälkeen tiedoston pitäisi näyttää tältä:

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

      Tiedoston IfModule-kääre kertoo Apachelle, että se huolehtii näistä direktiiveistä vain, jos mod_cache_disk-moduuli on käytössä. CacheRoot-direktiivi määrittää paikan levyllä, jossa välimuistia ylläpidetään. Direktiivit CacheDirLevels ja CacheDirLength vaikuttavat molemmat osaltaan siihen, miten välimuistihakemistorakenne rakennetaan.

      Tiedon tallentamiseen käytettäväksi avaimeksi luodaan palveltavan URL-osoitteen md5hash. Tiedot järjestetään hakemistoihin, jotka johdetaan kunkin hashin alkumerkkien perusteella. CacheDirLevels määrittää luotavien alihakemistojen määrän ja CacheDirLength määrittää, kuinka monta merkkiä käytetään kunkin hakemiston nimenä. Joten hash b1946ac92492d2347c6235b4d2611184 edellä esitetyillä oletusarvoilla arkistoitaisiin hakemistorakenteeseen b/1/946ac92492d2347c6235b4d2611184. Yleensä sinun ei tarvitse muuttaa näitä arvoja, mutta on hyvä tietää, mihin niitä käytetään.

      Huomautus

      Jos päätät muuttaa CacheRoot-arvoa, sinun on avattava /etc/default/apache2-tiedosto ja muutettava HTCACHECLEAN_PATH:n arvo vastaamaan valintaasi. Tätä käytetään välimuistin puhdistamiseen säännöllisin väliajoin, joten sen on oltava oikeassa sijainnissa.

      Joitakin muita arvoja, joita voit asettaa tässä tiedostossa, ovat CacheMaxFileSize ja CacheMinFileSize, jotka asettavat tiedostokokojen vaihteluvälit tavuina, jotka Apache sitoutuu välimuistiin, sekä CacheReadSize ja CacheReadTime, jotka mahdollistavat sisällön odottamisen ja puskuroinnin ennen lähettämistä asiakkaalle. Tämä voi olla hyödyllistä, jos sisältö sijaitsee jossain muualla kuin tällä palvelimella.

      Virtuaalipalvelimen muokkaaminen

      Suurin osa välimuistitallennuksen konfiguroinnista tapahtuu hienojakoisemmalla tasolla, joko virtuaalisen isännän määritelmässä tai tietyssä sijaintilohkossa.

      Avaa yksi virtuaalisen isäntäväen tiedosto, jotta voit seurata sitä. Oletamme, että käytät tässä oppaassa oletustiedostoa:

      • sudo nano /etc/apache2/sites-enabled

      Virtuaali-isäntälohkossa, minkään sijaintilohkon ulkopuolella, voimme aloittaa joidenkin välimuistitallennusominaisuuksien määrittämisen. Tässä oppaassa oletamme, että haluamme kytkeä CacheQuickHandler pois päältä, jotta käsittelyä tehdään enemmän. Tämä mahdollistaa meille kattavammat välimuistisäännöt.

      Käytämme tätä tilaisuutta myös välimuistin lukituksen määrittämiseen. Tämä on tiedostojen lukitusjärjestelmä, jota Apache käyttää, kun se tarkistaa sisällön alkuperän kanssa, onko sisältö edelleen voimassa. Sinä aikana, kun tätä kyselyä tyydytetään, jos samaa sisältöä koskevia lisäpyyntöjä tulee, se johtaa lisäpyyntöihin backend-resurssille, mikä voi aiheuttaa kuormituspiikkejä.

      Välimuistilukon asettaminen resurssille kelpoisuuden tarkistamisen aikana kertoo Apachelle, että resurssia päivitetään parhaillaan. Tänä aikana vanhentunutta resurssia voidaan palvella varoitusotsikolla, joka osoittaa sen tilan. Asetamme tämän välimuistilukkohakemiston /tmp-kansioon. Annamme lukitukselle enintään 5 sekuntia aikaa, jotta sen voidaan katsoa olevan voimassa. Nämä esimerkit on otettu suoraan Apachen dokumentaatiosta, joten niiden pitäisi toimia hyvin tarkoituksiimme.

      Käskemme Apachea myös jättämään Set-Cookie-otsikot huomioimatta ja olemaan tallentamatta niitä välimuistiin. Näin estämme Apachea vuotamasta vahingossa käyttäjäkohtaisia evästeitä muille osapuolille. Set-Cookie-otsikko poistetaan ennen kuin otsikot tallennetaan välimuistiin.

      /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>

      Meidän on vielä itse asiassa otettava välimuistitallennus käyttöön tälle virtuaali-isännälle. Voimme tehdä tämän CacheEnable-direktiivillä. Jos tämä asetetaan virtuaalisen isännän lohkossa, meidän on annettava välimuistitallennusmenetelmä (disk tai socache) sekä pyydetyt URI:t, jotka pitäisi tallentaa välimuistiin. Esimerkiksi kaikkien vastausten välimuistiin tallentamiseksi tämä voitaisiin asettaa arvoon CacheEnable disk /, mutta jos halutaan tallentaa välimuistiin vain /public URI:n mukaiset vastaukset, tämä voitaisiin asettaa arvoon CacheEnable disk /public.

      Me valitsemme erilaisen reitin ottamalla välimuistimme käyttöön tietyn sijaintilohkon sisällä. Näin tekemällä meidän ei tarvitse antaa URI-polkua CacheEnable-komentoon. Kaikki URI:t, jotka tarjoillaan kyseisestä sijainnista, tallennetaan välimuistiin. Otamme myös käyttöön CacheHeader-direktiivin, jotta vastausotsikkomme ilmoittavat, käytettiinkö välimuistia pyynnön palvelemiseen vai ei.

      Toinen direktiivi, jonka asetamme, on CacheDefaultExpire, jotta voimme asettaa vanhentumisajan (sekunteina), jos sisällölle ei ole asetettu Expires– eikä Last-Modified-otsikoita. Samoin asetamme CacheMaxExpire rajoittaaksemme kohteiden tallennusajan. Asetamme CacheLastModifiedFactor, jotta Apache voi luoda vanhenemispäivän, jos sisällössä on Last-Modified-päivämäärä, mutta ei vanhenemispäivää. Kerroin kerrotaan muutoksesta kuluneella ajalla kohtuullisen vanhentumisajan asettamiseksi.

      /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>

      Tallenna ja sulje tiedosto, kun olet määrittänyt kaiken tarvittavan.

      Tarkista koko konfiguraatiosi syntaksivirheiden varalta kirjoittamalla:

      • sudo apachectl configtest

      Jos virheitä ei ilmoiteta, käynnistä palvelu uudelleen kirjoittamalla:

      • sudo service apache2 restart

      Sisällön vanhentumisaikojen (Expires) ja välimuistitallennuksen (Caching) otsakkeiden asettaminen

      Yllä olevassa konfiguraatiossa konfiguroimme HTTP:n välimuistitallennuksen, joka perustuu HTTP-otsakkeisiin. Missään tarjoamassamme sisällössä ei kuitenkaan ole Expires– tai Cache-Control-otsakkeita, joita tarvitaan älykkäiden välimuistitallennuspäätösten tekemiseen. Asettaaksemme nämä otsikot meidän on hyödynnettävä muutamaa muuta moduulia.

      Moduuli mod_expires voi asettaa sekä Expires-otsikon että max-age-vaihtoehdon Cache-Control-otsikossa. mod_headers-moduulin avulla voidaan lisätä tarkempia Cache-Control-vaihtoehtoja välimuistitallennuskäytännön tarkemmaksi virittämiseksi.

      Voidaan ottaa molemmat moduulit käyttöön kirjoittamalla:

      • sudo a2enmod expires
      • sudo a2enmod headers

      Kun olemme ottaneet nämä moduulit käyttöön, voimme siirtyä taas suoraan muokkaamaan virtuaalista isäntäkansiotiedostoa:

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

      Moduulin mod_expires avulla saadaan käyttöön vain kolme direktiiviä. ExpiresActive kytkee vanhenemiskäsittelyn päälle tietyssä kontekstissa asettamalla sen arvoksi ”on”. Kaksi muuta direktiiviä ovat hyvin samankaltaisia keskenään. Direktiivi ExpiresDefault asettaa oletusarvoisen vanhentumisajan, ja ExpiresByType asettaa vanhentumisajan sisällön MIME-tyypin mukaan. Molemmat näistä asettavat Expires ja Cache-Control ”max-age” oikeisiin arvoihin.

      Nämä kaksi asetusta voivat olla kahdella eri syntaksilla. Ensimmäinen on yksinkertaisesti ”A” tai ”M”, jota seuraa sekuntimäärä. Tämä asettaa vanhentumisajan suhteessa siihen, milloin sisältöä viimeksi ”käytettiin” tai ”muutettiin”. Esimerkiksi nämä molemmat vanhentaisivat sisällön 30 sekuntia sen jälkeen, kun sitä käytettiin.

      ExpiresDefault A30ExpireByType text/html A30

      Toinen syntaksi mahdollistaa yksityiskohtaisemman määrittelyn. Sen avulla voit käyttää muita yksiköitä kuin sekunteja, jotka ihmisten on helpompi laskea. Se käyttää myös koko sanaa ”access” tai ”modification”. Koko expiration-konfiguraatio tulisi pitää lainausmerkeissä, esimerkiksi näin:

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

      Meille asetamme vain oletusarvoisen expirationin. Aloitamme asettamalla sen arvoksi 5 minuuttia, jotta jos teemme virheen tutustuessamme, se ei tallennu asiakkaidemme tietokoneille erittäin pitkäksi aikaa. Kun olemme varmempia kyvystämme valita sisällöllemme sopivat käytännöt, voimme säätää tämän aggressiivisemmaksi:

      /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>

      Tämä asettaa Expires-otsikkomme viideksi minuutiksi tulevaisuuteen ja asettaa Cache-Control max-age=300. Tarkentaaksemme välimuistitallennuskäytäntöämme edelleen, voimme käyttää Header-direktiiviä. Voimme käyttää merge-vaihtoehtoa lisätäksemme lisää Cache-Control-vaihtoehtoja. Voit kutsua tätä useita kertoja ja lisätä haluamasi lisäkäytännöt. Tutustu tähän oppaaseen saadaksesi käsityksen sisällöllesi asetettavista välimuistitallennuskäytännöistä. Esimerkissämme asetamme vain ”public”, jotta muut välimuistit voivat olla varmoja siitä, että ne saavat tallentaa kopioita.

      Voidaksemme asettaa ETags sivustomme staattiselle sisällölle (validointiin käytettäväksi), voimme käyttää FileETag-direktiiviä. Tämä toimii staattiselle sisällölle. Dynaamisesti luotua sisältöä varten sovelluksesi on vastuussa siitä, että ETags luodaan oikein.

      Käytämme direktiiviä asettaaksemme attribuutit, joita Apache käyttää Etag:n laskemiseen. Tämä voi olla INode, MTime, Size tai All riippuen siitä, haluammeko muuttaa ETag aina, kun tiedoston inode muuttuu, sen muutosajankohta muuttuu, sen koko muuttuu vai kaikki edellä mainitut. Voit antaa useamman kuin yhden arvon, ja voit muuttaa perittyjä asetuksia lapsikonteksteissa edeltämällä uusia asetuksia +– tai --merkillä. Meidän tarkoituksiimme käytämme vain ”all”, jotta kaikki muutokset rekisteröidään:

      /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>

      Tässä lisätään ”public” (pilkulla erotettuna) siihen arvoon, mikä tahansa arvo Cache-Control:ssä jo on, ja lisätään ETag staattiselle sisällöllemme.

      Kun lopetat, tallenna ja sulje tiedosto. Tarkista muutosten syntaksi kirjoittamalla:

      • sudo apachectl configtest

      Jos virheitä ei löytynyt, käynnistä palvelu uudelleen, jotta välimuistitallennuskäytännöt voidaan ottaa käyttöön:

      • sudo service apache2 restart

      Johtopäätös

      Välimuistitallennuskäytäntöjen konfigurointi Apachen kanssa voi tuntua pelottavalta tehtävältä, koska vaihtoehtoja on niin paljon. Onneksi on helppo aloittaa yksinkertaisesta ja sitten kasvaa sitä mukaa, kun tarvitset lisää monimutkaisuutta. Useimmat ylläpitäjät eivät tarvitse jokaista välimuistitallennustyyppiä.

      Konfiguroidessasi välimuistitallennusta pidä mielessäsi ne erityiset ongelmat, joita yrität ratkaista, jotta et eksy eri toteutusvaihtoehtojen sekaan. Useimmat käyttäjät hyötyvät ainakin otsikoiden määrittämisestä. Jos välität tai tuotat sisältöä, HTTP-välimuistin asettamisesta voi olla hyötyä. Jaettujen objektien välimuistista on hyötyä tietyissä tehtävissä, kuten SSL-istuntojen tai todennustietojen tallentamisessa, jos käytät backend-palveluntarjoajaa. Tiedostojen välimuistiin tallentaminen voidaan luultavasti rajoittaa niihin, joilla on hitaat järjestelmät.

    Leave a Reply