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.
MMapFile
Direktiivi 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:
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:
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
Yleistä
Yleiskatsausta
Pääasialliset mukana olevat moduulit: mod_socache_dbm
, mod_socache_dc
, mod_socache_memcache
, mod_socache_shmcb
mod_authn_socache
, mod_ssl
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.
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ää yksinkertaistadbm
-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 sijaanmod_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:
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ä:
<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ä:
. . .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 levyllemod_cache_disk
-moduulin avulla, mutta jaettujen objektien välimuisti on käytettävissä myösmod_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, jotenhtcacheclean
-niminen työkalu on ajettava ajoittain välimuistin pienentämiseksi. Tämä voidaan ajaa manuaalisesti, asettaa tavalliseksicron
-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 kuinmod_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 ennenmod_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, josCacheQuickHandler
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, josmod_cache_disk
-moduuli on käytössä.CacheRoot
-direktiivi määrittää paikan levyllä, jossa välimuistia ylläpidetään. DirektiivitCacheDirLevels
jaCacheDirLength
vaikuttavat molemmat osaltaan siihen, miten välimuistihakemistorakenne rakennetaan.Tiedon tallentamiseen käytettäväksi avaimeksi luodaan palveltavan URL-osoitteen
md5
hash. Tiedot järjestetään hakemistoihin, jotka johdetaan kunkin hashin alkumerkkien perusteella.CacheDirLevels
määrittää luotavien alihakemistojen määrän jaCacheDirLength
määrittää, kuinka monta merkkiä käytetään kunkin hakemiston nimenä. Joten hashb1946ac92492d2347c6235b4d2611184
edellä esitetyillä oletusarvoilla arkistoitaisiin hakemistorakenteeseenb/1/946ac92492d2347c6235b4d2611184
. Yleensä sinun ei tarvitse muuttaa näitä arvoja, mutta on hyvä tietää, mihin niitä käytetään.HuomautusJos päätät muuttaa
CacheRoot
-arvoa, sinun on avattava/etc/default/apache2
-tiedosto ja muutettavaHTCACHECLEAN_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
jaCacheMinFileSize
, jotka asettavat tiedostokokojen vaihteluvälit tavuina, jotka Apache sitoutuu välimuistiin, sekäCacheReadSize
jaCacheReadTime
, 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
taisocache
) sekä pyydetyt URI:t, jotka pitäisi tallentaa välimuistiin. Esimerkiksi kaikkien vastausten välimuistiin tallentamiseksi tämä voitaisiin asettaa arvoonCacheEnable disk /
, mutta jos halutaan tallentaa välimuistiin vain/public
URI:n mukaiset vastaukset, tämä voitaisiin asettaa arvoonCacheEnable 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öönCacheHeader
-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 asetettuExpires
– eikäLast-Modified
-otsikoita. Samoin asetammeCacheMaxExpire
rajoittaaksemme kohteiden tallennusajan. AsetammeCacheLastModifiedFactor
, jotta Apache voi luoda vanhenemispäivän, jos sisällössä onLast-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
– taiCache-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
-vaihtoehdonCache-Control
-otsikossa.mod_headers
-moduulin avulla voidaan lisätä tarkempiaCache-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. DirektiiviExpiresDefault
asettaa oletusarvoisen vanhentumisajan, jaExpiresByType
asettaa vanhentumisajan sisällön MIME-tyypin mukaan. Molemmat näistä asettavatExpires
jaCache-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 asettaaCache-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 ollaINode
,MTime
,Size
taiAll
riippuen siitä, haluammeko muuttaaETag
aina, kun tiedostoninode
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äänETag
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