Jak nakonfigurovat ukládání obsahu do mezipaměti Apache v Ubuntu 14.04

Co je to ukládání do mezipaměti?

Ukládání do mezipaměti je metoda zlepšení výkonu serveru tím, že umožňuje dočasné uložení běžně požadovaného obsahu způsobem, který umožňuje rychlejší přístup. To urychluje zpracování a doručení tím, že se odstraní některé operace náročné na zdroje.

Vytvořením účinných pravidel pro ukládání do mezipaměti se obsah, který je vhodný pro ukládání do mezipaměti, uloží tak, aby se zlepšila doba odezvy, šetřily zdroje a minimalizovalo zatížení. Apache poskytuje celou řadu mezipamětí vhodných pro zrychlení různých typů operací. V této příručce se budeme zabývat tím, jak nakonfigurovat Apache 2.4 v Ubuntu 14.04 pomocí jeho různých modulů mezipaměti.

Chcete-li se dozvědět více o vytváření obecných strategií ukládání do mezipaměti, přečtěte si tento článek.

Úvod do ukládání do mezipaměti v Apache

Apache může ukládat obsah do mezipaměti s různou úrovní propracovanosti a škálovatelnosti. Projekt je dělí do tří skupin podle způsobu ukládání obsahu do mezipaměti. Obecné rozdělení je následující:

  • Ukládání do mezipaměti souborů: Nejzákladnější strategie ukládání do mezipaměti, která jednoduše otevírá soubory nebo deskriptory souborů při spuštění serveru a udržuje je k dispozici pro urychlení přístupu.
  • Ukládání do mezipaměti klíč-hodnota: Ukládání do mezipaměti klíč-hodnota, které se používá hlavně pro ukládání do mezipaměti protokolu SSL a ověřování, používá model sdílených objektů, který může ukládat položky, jejichž opakovaný výpočet je nákladný.
  • Standardní ukládání do mezipaměti HTTP: Nejpružnější a obecně nejužitečnější mechanismus ukládání do mezipaměti, tento třístavový systém může ukládat odpovědi a ověřovat je po vypršení platnosti. Lze jej nakonfigurovat s ohledem na výkon nebo flexibilitu v závislosti na konkrétních potřebách.

Rychlý pohled na výše uvedené popisy může odhalit, že se výše uvedené metody do jisté míry překrývají, ale také že může být užitečné používat více strategií současně. Například použití úložiště klíč-hodnota pro relace SSL a zapnutí standardní mezipaměti HTTP pro odpovědi by vám mohlo umožnit výrazně odlehčit datovým zdrojům a zrychlit mnoho operací doručování obsahu pro vaše klienty.

Teď, když máte širokou představu o jednotlivých mechanismech mezipaměti Apache, podívejme se na tyto systémy podrobněji.

Ukládání souborů do mezipaměti

Všeobecný přehled

  • Primární zapojené moduly: mod_file_cache
  • Hlavní případy použití: ukládání obsahu souborů nebo deskriptorů souborů při spuštění serveru. Jedná se o statické reprezentace, které nelze spolehlivě měnit až do restartu serveru.
  • Vlastnosti: jednoduchý, zlepšuje výkon pomalých souborových systémů
  • Nevýhody: experimentální funkce, nereaguje na aktualizace souborového systému, musí se používat střídmě, aby se vešel do omezení operačního systému, lze použít pouze na statické soubory

Detaily

Modul mod_file_cache slouží především ke zrychlení přístupu k souborům na serverech s pomalými souborovými systémy. Poskytuje výběr ze dvou konfiguračních směrnic, přičemž obě mají za cíl urychlit proces obsluhy statických souborů tím, že část práce se provede při spuštění serveru, nikoliv při požadavku na soubory.

Směrnice CacheFile slouží k zadání cesty k souborům na disku, ke kterým chcete urychlit přístup. Při spuštění Apache otevře statické soubory, které byly zadány, a uloží handle souboru do mezipaměti, čímž se vyhne nutnosti otevřít soubor při jeho vyžádání. Počet souborů, které lze tímto způsobem otevřít, závisí na omezeních stanovených operačním systémem.

Direktivou MMapFile se soubory otevírají také při prvním spuštění Apache. Příkaz MMapFile však ukládá obsah souboru do mezipaměti, nikoli pouze obsluhu souboru. To umožňuje zvýšit výkon těchto stránek, ale má to některá závažná omezení. Neuchovává žádné záznamy o množství použité paměti, takže je možné, že paměť dojde. Uvědomte si také, že podřízené procesy budou kopírovat jakoukoli přidělenou paměť, což může vést k rychlejšímu vyčerpání prostředků, než jste původně předpokládali. Tuto směrnici používejte jen střídmě.

Tyto směrnice se vyhodnocují pouze při spuštění Apache. To znamená, že se nemůžete spoléhat na to, že Apache zachytí změny provedené po jeho spuštění. Používejte je pouze u statických souborů, které se po dobu trvání relace Apache nezmění. V závislosti na způsobu úpravy souborů může být server na změny upozorněn, ale toto chování se neočekává a nebude vždy fungovat správně. Pokud je nutné provést změny v souborech předaných těmto směrnicím, restartujte po provedení změn Apache.

Jak povolit ukládání souborů do mezipaměti

Ukládání souborů do mezipaměti zajišťuje modul mod_file_cache. Chcete-li tuto funkci používat, musíte modul povolit.

Při použití Ubuntu 14.04 bude modul nainstalován, ale při instalaci Apache bude zakázán. Modul povolíte zadáním:

  • sudo a2enmod file_cache

Poté byste měli upravit hlavní konfigurační soubor a nastavit směrnice pro ukládání souborů do mezipaměti. Soubor otevřete zadáním:

  • sudo nano /etc/apache2/apache2.conf

Pro nastavení ukládání souborů do mezipaměti použijte direktivu CacheFile. Tato direktiva přebírá seznam cest k souborům oddělených mezerami takto:

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

Při restartu serveru Apache otevře uvedené soubory a uloží jejich handle do mezipaměti pro rychlejší přístup.

Pokud chcete místo toho namapovat několik souborů přímo do paměti, můžete použít direktivu MMapFile. Její syntaxe je v podstatě stejná jako u poslední direktivy v tom smyslu, že jednoduše přebírá seznam cest k souborům:

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

V praxi by nebyl důvod konfigurovat jak CacheFile, tak MMapFile pro stejnou sadu souborů, ale můžete použít obě pro různé sady souborů.

Když jste hotovi, můžete soubory uložit a zavřít. Zkontrolujte syntaxi konfiguračního souboru zadáním:

  • sudo apachectl configtest

Pokud poslední řádek zní Syntax OK, můžete bezpečně restartovat instanci Apache:

  • sudo service apache2 restart

Apache se restartuje a uloží do mezipaměti obsah souborů nebo obslužné programy v závislosti na použitých směrnicích.

Key-Value Caching

Obecný přehled

  • Primární zapojené moduly: mod_socache_dbm, mod_socache_dc, mod_socache_memcache, mod_socache_shmcb
  • Zapojené podpůrné moduly: mod_authn_socache, mod_ssl
  • Hlavní případy použití: ukládání relací SSL nebo ověřovacích údajů, sešívání SSL
  • Vlastnosti: sdílená mezipaměť objektů pro ukládání složitých zdrojů, může pomáhat při ukládání relací SSL do mezipaměti a sešívání, flexibilní backendy
  • Nevýhody: nemá validační mechanismy, pro výkonnější/pružnější backendy je třeba konfigurovat samostatný software, některé chyby v kódu

Detaily

Ukládání klíčových hodnot do mezipaměti je složitější než ukládání do mezipaměti souborů a má cílenější výhody. Mezipaměť klíč-hodnota Apache, známá také jako sdílená objektová mezipaměť, se používá hlavně k zamezení opakování nákladných operací spojených s nastavením přístupu klienta k obsahu, na rozdíl od obsahu samotného. Konkrétně ji lze použít k ukládání ověřovacích údajů, relací SSL a k zajištění sešívání SSL.

Poznámka

V současné době se u každého poskytovatele mezipaměti sdílených objektů vyskytují určité problémy. Odkazy na tyto problémy budou uvedeny níže. Vezměte je v úvahu při posuzování, zda tuto funkci povolit.

Samotné ukládání do mezipaměti se provádí pomocí některého z modulů zprostředkovatele ukládání do mezipaměti sdílených objektů. Jsou to:

  • mod_socache_dbm: Tento backend používá jednoduchý databázový stroj dbm, což je souborové úložiště klíčových hodnot, které využívá hashování a buckety s pevnou velikostí. Tento zprostředkovatel trpí některými úniky paměti, takže pro většinu případů se doporučuje použít místo něj mod_socache_shmcb.
  • mod_socache_dc: Tento zprostředkovatel používá software pro ukládání do mezipaměti relací distcache. Tento projekt nebyl od roku 2004 aktualizován a pro některé distribuce není ani přibalen, takže jej používejte se zdravou dávkou opatrnosti.
  • mod_socache_memcache: Tento používá k ukládání položek distribuovanou paměťovou cache objektů memcache. Jedná se o nejlepší možnost pro distribuovanou mezipaměť mezi více servery. V současné době správně nevyprší platnost položek, ale do kmene správy verzí Apache byla odevzdána oprava, která tento problém řeší.
  • mod_socache_shmcb: V současné době je to nejlepší možnost pro ukládání klíčů do mezipaměti. Ukládá se do cyklické vyrovnávací paměti ve sdílené paměti, která bude odstraňovat záznamy, jakmile se zaplní. V současné době se dusí na položkách o velikosti nad 11k.

Společně s výše uvedenými moduly zprostředkovatelů budou v závislosti na cachovaných objektech potřeba další moduly. Například pro ukládání relací SSL do mezipaměti nebo pro konfiguraci sešívání SSL musí být povolen modul mod_ssl, který poskytne direktivy SSLSessionCache, respektive SSLStaplingCache. Podobně pro nastavení autentizační mezipaměti musí být povolen modul mod_authn_socache, aby bylo možné nastavit direktivu AuthnCacheSOCache.

Jak povolit mezipaměť klíč-hodnota

Pokud přesto chcete tento typ mezipaměti v Apache nakonfigurovat, s ohledem na výše uvedené chyby a výhrady postupujte podle následujících pokynů.

Způsob nastavení mezipaměti klíč-hodnota bude záviset na tom, k čemu bude použita a jakého poskytovatele používáte. Níže si projdeme základy autentizační mezipaměti i mezipaměti relací SSL.

V současné době existuje u autentizační mezipaměti chyba, která znemožňuje předávání argumentů poskytovateli mezipaměti. Problémy tedy budou mít všichni poskytovatelé, kteří neposkytují výchozí nastavení, o které se lze opřít.

Ověřovací mezipaměť

Ověřovací mezipaměť je užitečná, pokud používáte nákladnou metodu ověřování, například LDAP nebo databázové ověřování. Tyto typy operací mohou mít značný dopad na výkon, pokud je nutné zasáhnout backend při každém požadavku na ověření.

Nastavení ukládání do mezipaměti vyžaduje úpravu stávající konfigurace ověřování (v této příručce se nebudeme zabývat nastavením ověřování). Samotné úpravy budou v podstatě stejné bez ohledu na metodu ověřování backendu. Pro naši ukázku použijeme modul mod_socache_shmcb.

Nejprve povolte modul authn_socache a modul poskytovatele mod_socache_shmcb zadáním:

  • sudo a2enmod authn_socache
  • sudo a2enmod socache_shmcb

Otevřete hlavní konfigurační soubor Apache, abyste mohli zadat tento sdílený backend cache pro použití s ověřováním:

  • sudo nano /etc/apache2/apache2.conf

Uvnitř, směrem k horní části souboru, přidejte směrnici AuthnCacheSOCache. Určete, že jako zprostředkovatel se má použít shmcb. Pokud bude dříve diskutovaná chyba zabraňující předávání voleb opravena v době, kdy budete číst tento článek, můžete zadat umístění a velikost mezipaměti. Číslo se udává v bajtech, takže výsledkem komentovaného příkladu bude 512 kilobajtová mezipaměť:

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

Po dokončení soubor uložte a zavřete.

Dále otevřete konfigurační stránku virtuálního hostitele, na které je nakonfigurováno ověřování. Budeme předpokládat, že používáte konfiguraci 000-default.conf virtuálního hostitele, ale měli byste ji upravit tak, aby odrážela vaše prostředí:

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

V místě, kde jste nakonfigurovali ověřování, upravte blok pro přidání mezipaměti. Konkrétně musíte přidat AuthnCacheProvideFor, abyste řekli, které zdroje ověřování se mají ukládat do mezipaměti, přidat časový limit mezipaměti pomocí AuthnCacheTimeout a přidat socache do seznamu AuthBasicProvider před vaši běžnou metodu ověřování. Výsledek bude vypadat asi takto:

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

Výše uvedený příklad je pro ověřování souborů, které pravděpodobně nebude mít z ukládání do mezipaměti velký užitek. Při použití jiných metod autentizace by však implmentace měla být velmi podobná. Jediný podstatný rozdíl by byl tam, kde je ve výše uvedeném příkladu specifikace „soubor“, místo ní by se použila jiná metoda autentizace.

Uložit a zavřít soubor. Restartujte Apache, abyste mohli implementovat změny v ukládání do mezipaměti:

  • sudo service apache2 restart

SSL Session Caching

Podání ruky, které je nutné provést pro navázání spojení SSL, s sebou nese značnou režii. Proto ukládání dat relace do mezipaměti, aby se zabránilo tomuto inicializačnímu kroku pro další požadavky, může potenciálně tuto sankci obejít. Ideálním místem pro to je sdílená mezipaměť objektů.

Pokud již máte pro svůj server Apache nakonfigurováno SSL, bude mod_ssl povoleno. V Ubuntu to znamená, že soubor ssl.conf byl přesunut do adresáře /etc/apache2/mods-enabled. Tím je vlastně již nastaveno ukládání do mezipaměti. Uvnitř uvidíte několik řádků, jako je tento:

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

To vlastně stačí k nastavení cachování relací. Chcete-li to vyzkoušet, můžete použít klienta připojení OpenSSL. Zadejte:

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

Pokud je ID relace ve všech výsledcích stejné, vaše mezipaměť relace funguje správně. Stisknutím klávesy CTRL-C se vrátíte zpět do terminálu.

Standardní ukládání do mezipaměti HTTP

Obecný přehled

  • Zapojené primární moduly: mod_cache
  • Zapojené podpůrné moduly: mod_cache_disk, mod_cache_socache
  • Hlavní případy použití: Hlavní hlavní moduly: Ukládání obecného obsahu do mezipaměti
  • Funkce: Umí správně interpretovat hlavičky mezipaměti HTTP, umí revalidovat zastaralé záznamy, lze nasadit pro maximální rychlost nebo flexibilitu v závislosti na vašich potřebách
  • Nevýhody: Podrobnosti

    Protokol HTTP podporuje a poskytuje mechanismy pro ukládání odpovědí do mezipaměti po celé cestě doručení obsahu. Každý počítač, který se dotkne obsahu, může potenciálně ukládat do mezipaměti každou položku po určitou dobu v závislosti na zásadách ukládání do mezipaměti nastavených u původu obsahu a na vlastních pravidlech ukládání do mezipaměti počítače.

    Mezipaměťový mechanismus HTTP Apache ukládá do mezipaměti odpovědi podle zásad ukládání do mezipaměti HTTP, které vidí. Jedná se o systém ukládání do mezipaměti pro obecné účely, který dodržuje stejná pravidla, jakými by se řídil jakýkoli zprostředkující server, který má podíl na doručování. Díky tomu je tento systém velmi flexibilní a výkonný a umožňuje využít hlavičky, které byste již měli nastavit u svého obsahu (jak to udělat, se dozvíte níže).

    Cache HTTP je také známá jako „třístavová“ mezipaměť. To proto, že obsah v ní uložený může být v jednom ze tří stavů. Může být čerstvý, což znamená, že může být klientům servírován bez další kontroly, může být zastaralý, což znamená, že vypršel TTL obsahu, nebo může být neexistující, pokud se obsah ve vyrovnávací paměti nenachází.

    Pokud se obsah stane zastaralým, může jej vyrovnávací paměť při dalším požadavku znovu ověřit kontrolou obsahu v místě původu. Pokud se nezměnil, může obnovit datum čerstvosti a servírovat aktuální obsah. V opačném případě načte změněný obsah a uloží jej na dobu povolenou zásadami ukládání do mezipaměti.

    Přehled modulů

    Logika ukládání do mezipaměti HTTP je k dispozici prostřednictvím modulu mod_cache. Vlastní ukládání do mezipaměti se provádí pomocí jednoho ze zprostředkovatelů ukládání do mezipaměti. Obvykle se cache ukládá na disk pomocí modulu mod_cache_disk, ale cachování sdílených objektů je k dispozici také prostřednictvím modulu mod_cache_socache.

    Modul mod_cache_disk cachuje na disku, takže může být užitečný, pokud obsah proxy serveru přenášíte ze vzdáleného umístění, generujete jej z dynamického procesu nebo se jen snažíte urychlit práci tím, že cachujete na rychlejším disku, než na kterém se obvykle nachází váš obsah. Jedná se o nejlépe otestovaného poskytovatele a ve většině případů by měl být pravděpodobně vaší první volbou. Mezipaměť se nečistí automaticky, takže je třeba občas spustit nástroj htcacheclean, který mezipaměť zeštíhlí. Ten může být spuštěn ručně, nastaven jako běžná úloha cron nebo spuštěn jako démon.

    Modul mod_cache_socache ukládá do mezipaměti jednoho z poskytovatelů sdílených objektů (stejných, o kterých byla řeč v minulé části). To může mít potenciálně lepší výkon než mod_cache_disk (v závislosti na tom, který poskytovatel sdílené mezipaměti je zvolen). Je však mnohem novější a spoléhá se na poskytovatele sdílených objektů, kteří mají dříve diskutované chyby. Před zavedením možnosti mod_cache_socache doporučujeme komplexní testování.

    Umístění mezipaměti HTTP

    V závislosti na vašich potřebách lze mezipaměť HTTP serveru Apache nasadit ve dvou různých konfiguracích.

    Pokud je možnost CacheQuickHandler nastavena na „zapnuto“, bude mezipaměť kontrolována velmi brzy v procesu zpracování požadavků. Pokud je obsah nalezen, bude servírován přímo bez dalšího zpracování. To znamená, že je to neuvěřitelně rychlé, ale také to znamená, že to neumožňuje procesy, jako je ověřování obsahu. Pokud je v mezipaměti obsah, který normálně vyžaduje ověření nebo řízení přístupu, bude přístupný komukoli bez ověření, pokud je CacheQuickHandler nastaveno na „on“.

    V podstatě to emuluje samostatnou mezipaměť před vaším webovým serverem. Pokud váš webový server potřebuje provádět jakoukoli podmíněnou kontrolu, ověřování nebo autorizaci, k tomu nedojde. Apache nebude vyhodnocovat ani direktivy uvnitř bloků <Location> nebo <Directory>. Všimněte si, že CacheQuickHandler je ve výchozím nastavení nastaven na „zapnuto“!

    Pokud je CacheQuickHandler nastaven na „vypnuto“, bude mezipaměť kontrolována výrazně později v sekvenci zpracování požadavků. Představte si tuto konfiguraci jako umístění mezipaměti mezi logiku zpracování Apache a skutečný obsah. To umožní spuštění běžných směrnic zpracování před načtením obsahu z mezipaměti. Nastavením této funkce na „vypnuto“ vyměníte trochu rychlosti za možnost zpracovávat požadavky hlouběji.

    Jak nakonfigurovat standardní ukládání do mezipaměti HTTP

    Pro zapnutí ukládání do mezipaměti je třeba povolit modul mod_cache a také jednoho z jeho poskytovatelů ukládání do mezipaměti. Jak jsme uvedli výše, modul mod_cache_disk je dobře otestovaný, takže se na něj budeme spoléhat.

    Povolení modulů

    V systému Ubuntu můžete tyto moduly povolit zadáním:

    • sudo a2enmod cache
    • sudo a2enmod cache_disk

    Tím se při příštím restartu serveru povolí funkce ukládání do mezipaměti.

    Bude také nutné nainstalovat balíček apache2-utils, který obsahuje nástroj htcacheclean sloužící v případě potřeby ke zmenšení mezipaměti. Ten nainstalujete zadáním:

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

    Modifikace globální konfigurace

    Většina konfigurace pro ukládání do mezipaměti bude probíhat v rámci jednotlivých definic virtuálních hostitelů nebo bloků umístění. Povolením funkce mod_cache_disk se však aktivuje také globální konfigurace, kterou lze použít k určení některých obecných atributů. Otevřete nyní tento soubor a podívejte se na něj:

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

    Po odstranění komentářů by měl soubor vypadat takto:

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

    Obal IfModule říká Apache, aby se o tyto směrnice staral pouze v případě, že je povolen modul mod_cache_disk. Direktiva CacheRoot určuje místo na disku, kde bude mezipaměť udržována. Obě CacheDirLevels a CacheDirLength přispívají k definování způsobu, jakým bude vytvořena adresářová struktura cache.

    Jako klíč pro ukládání dat bude vytvořen hash md5 obsluhované adresy URL. Data budou uspořádána do adresářů odvozených od počátečních znaků každého hashe. CacheDirLevels Určuje počet podadresářů, které se mají vytvořit, a CacheDirLength Určuje, kolik znaků se má použít jako název každého adresáře. Takže hash b1946ac92492d2347c6235b4d2611184 s výchozími hodnotami uvedenými výše by byl uložen v adresářové struktuře b/1/946ac92492d2347c6235b4d2611184. Obvykle tyto hodnoty nebudete muset měnit, ale je dobré vědět, k čemu se používají.

    Poznámka

    Pokud se rozhodnete upravit hodnotu CacheRoot, budete muset otevřít soubor /etc/default/apache2 a upravit hodnotu HTCACHECLEAN_PATH tak, aby odpovídala vašemu výběru. Ta se používá k čištění mezipaměti v pravidelných intervalech, takže musí mít správné umístění mezipaměti.

    Některé další hodnoty, které můžete v tomto souboru nastavit, jsou CacheMaxFileSize a CacheMinFileSize, které nastavují rozsahy velikostí souborů v bajtech, které Apache odevzdá do mezipaměti, a také CacheReadSize a CacheReadTime, které umožňují čekat a vyrovnávat obsah před odesláním klientovi. To může být užitečné, pokud se obsah nachází jinde než na tomto serveru.

    Modifikace virtuálního serveru

    Většina konfigurace pro ukládání do mezipaměti bude probíhat na podrobnější úrovni, buď v definici virtuálního hostitele, nebo v konkrétním bloku umístění.

    Otevřete jeden ze souborů virtuálního hostitele a postupujte podle něj. Budeme předpokládat, že v tomto návodu používáte výchozí soubor:

    • sudo nano /etc/apache2/sites-enabled

    V bloku virtuálního hostitele, mimo jakýkoli blok umístění, můžeme začít konfigurovat některé vlastnosti ukládání do mezipaměti. V tomto průvodci budeme předpokládat, že chceme vypnout CacheQuickHandler, aby se provádělo více zpracování. To nám umožní až úplnější pravidla ukládání do mezipaměti.

    Tuto příležitost využijeme také ke konfiguraci zamykání mezipaměti. Jedná se o systém zamykání souborů, který bude Apache používat, když bude kontrolovat u původu obsahu, zda je obsah stále platný. Pokud by během doby, kdy je tento dotaz uspokojován, přicházely další požadavky na stejný obsah, vedlo by to k dalším požadavkům na backendový zdroj, což by mohlo způsobit skokové zvýšení zátěže.

    Nastavení zámku mezipaměti pro zdroj během ověřování říká Apache, že zdroj je právě obnovován. Během této doby může být zastaralý prostředek obsluhován s varovnou hlavičkou označující jeho stav. Nastavíme to pomocí adresáře zámku mezipaměti ve složce /tmp. Dovolíme maximálně 5 sekund, aby byl zámek považován za platný. Tyto příklady jsou převzaty přímo z dokumentace Apache, takže by měly pro naše účely dobře fungovat.

    Apache také řekneme, aby ignoroval hlavičky Set-Cookie a neukládal je do mezipaměti. Tím zabráníme tomu, aby Apache náhodně vyzradil soubory cookie specifické pro uživatele dalším stranám. Hlavička Set-Cookie bude před uložením do mezipaměti odstraněna.

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

    Ještě musíme skutečně povolit ukládání do mezipaměti pro tohoto virtuálního hostitele. To můžeme provést pomocí směrnice CacheEnable. Pokud je nastavena v bloku virtuálního hostitele, museli bychom zadat metodu ukládání do mezipaměti (disk nebo socache) a také požadované URI, které se mají ukládat do mezipaměti. Například pro ukládání všech odpovědí do mezipaměti by tato hodnota mohla být nastavena na CacheEnable disk /, ale pokud bychom chtěli ukládat do mezipaměti pouze odpovědi pod URI /public, mohli bychom nastavit tuto hodnotu na CacheEnable disk /public.

    Půjdeme jinou cestou a povolíme naše ukládání do mezipaměti v rámci konkrétního bloku umístění. Tím, že to uděláme, nemusíme zadávat cestu k URI příkazu CacheEnable. Veškeré URI, které by byly obsluhovány z tohoto umístění, budou uloženy do mezipaměti. Zapneme také direktivu CacheHeader, takže v hlavičkách naší odpovědi bude uvedeno, zda byla k obsloužení požadavku použita mezipaměť, nebo ne.

    Další direktivou, kterou nastavíme, je CacheDefaultExpire, abychom mohli nastavit vypršení platnosti (v sekundách), pokud nejsou u obsahu nastaveny hlavičky Expires ani Last-Modified. Podobně nastavíme CacheMaxExpire, abychom omezili dobu, po kterou se budou položky ukládat. Nastavíme CacheLastModifiedFactor, aby Apache mohl vytvořit datum expirace, pokud má Last-Modified datum, ale nemá žádnou expiraci. Koeficient se vynásobí dobou od modifikace, aby se nastavila rozumná expirace.

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

    Pokud jste nakonfigurovali vše potřebné, soubor uložte a zavřete.

    Zkontrolujte celou konfiguraci, zda neobsahuje syntaktické chyby, zadáním:

    • sudo apachectl configtest

    Pokud nejsou hlášeny žádné chyby, restartujte službu zadáním:

    • sudo service apache2 restart

    Nastavení vypršení platnosti a cachování hlaviček obsahu

    Ve výše uvedené konfiguraci jsme nakonfigurovali cachování HTTP, které se spoléhá na hlavičky HTTP. Žádný z obsahu, který obsluhujeme, však ve skutečnosti nemá hlavičky Expires nebo Cache-Control potřebné k inteligentnímu rozhodování o ukládání do mezipaměti. Abychom mohli tyto hlavičky nastavit, musíme využít několik dalších modulů.

    Modul mod_expires dokáže nastavit jak hlavičku Expires, tak možnost max-age v hlavičce Cache-Control. Modul mod_headers lze použít k přidání specifičtějších voleb Cache-Control pro další vyladění zásad ukládání do mezipaměti.

    Oba tyto moduly můžeme povolit zadáním:

    • sudo a2enmod expires
    • sudo a2enmod headers

    Po povolení těchto modulů můžeme opět přejít rovnou k úpravě našeho souboru virtuálního hostitele:

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

    Modul mod_expires poskytuje pouze tři směrnice. Příkaz ExpiresActive zapíná zpracování vypršení platnosti v určitém kontextu nastavením na hodnotu „on“. Další dvě direktivy jsou si navzájem velmi podobné. Direktiva ExpiresDefault nastavuje výchozí dobu expirace a direktiva ExpiresByType nastavuje dobu expirace podle typu MIME obsahu. Obě nastaví Expires a Cache-Control „max-age“ na správné hodnoty.

    Tato dvě nastavení mohou mít dvě různé syntaxe. První je jednoduše „A“ nebo „M“ následované počtem sekund. Tím se nastaví vypršení platnosti ve vztahu k době, kdy byl obsah naposledy „zpřístupněn“, respektive „upraven“. Například v obou případech by platnost obsahu vypršela 30 sekund po přístupu k němu.

    ExpiresDefault A30ExpireByType text/html A30

    Druhá syntaxe umožňuje podrobnější konfiguraci. Umožňuje používat jiné jednotky než sekundy, které jsou pro člověka snadněji spočitatelné. Používá také plné slovo „přístup“ nebo „modifikace“. Celá konfigurace expirace by měla být v uvozovkách, například takto:

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

    Pro naše účely nastavíme pouze výchozí expiraci. Začneme tím, že ji nastavíme na 5 minut, takže pokud při seznamování uděláme chybu, nebude uložena na počítačích našich klientů extrémně dlouho. Až si budeme jistější svou schopností vybrat zásady vhodné pro náš obsah, můžeme to upravit na něco agresivnějšího:

    /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ímto nastavíme naši hlavičku Expires na pět minut do budoucna a nastavíme Cache-Control max-age=300. Abychom mohli dále upřesnit naše zásady ukládání do mezipaměti, můžeme použít direktivu Header. Pro přidání dalších možností Cache-Control můžeme použít volbu merge. Tuto funkci můžete zavolat vícekrát a přidat libovolné další zásady. Podívejte se na tuto příručku, abyste získali představu o zásadách ukládání do mezipaměti, které byste chtěli nastavit pro svůj obsah. Pro náš příklad nastavíme pouze „public“, aby ostatní keše měly jistotu, že mohou ukládat kopie.

    Pro nastavení ETags pro statický obsah na našem webu (pro použití k ověření) můžeme použít směrnici FileETag. Ta bude fungovat i pro statický obsah. Pro dynamicky generovaný obsah bude vaše aplikace zodpovědná za správné generování ETags.

    Direktivu použijeme k nastavení atributů, které Apache použije k výpočtu Etag. Může to být INode, MTime, Size nebo All podle toho, zda chceme ETag měnit vždy, když se změní inode souboru, změní se čas jeho modifikace, změní se jeho velikost nebo se změní všechny výše uvedené parametry. Můžete zadat více než jednu hodnotu a zděděné nastavení můžete změnit v podřízených kontextech tak, že před nové nastavení uvedete + nebo -. Pro naše účely použijeme jen „all“, aby byly všechny změny zaregistrovány:

    /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ímto přidáme „public“ (oddělené čárkou) k jakékoliv hodnotě Cache-Control, kterou již máme, a připojíme ETag pro náš statický obsah.

    Po dokončení soubor uložte a zavřete. Zkontrolujte syntaxi změn zadáním:

    • sudo apachectl configtest

    Pokud nebyly nalezeny žádné chyby, restartujte službu a implementujte zásady ukládání do mezipaměti:

    • sudo service apache2 restart

    Závěr

    Konfigurace ukládání do mezipaměti pomocí Apache se může zdát jako náročná práce vzhledem k tomu, kolik je zde možností. Naštěstí je snadné začít jednoduše a pak se rozšiřovat podle toho, jak budete vyžadovat větší složitost. Většina správců nebude vyžadovat každý z typů mezipaměti.

    Při konfiguraci mezipaměti mějte na paměti konkrétní problémy, které se snažíte vyřešit, abyste se neztratili v různých možnostech implementace. Pro většinu uživatelů bude výhodné nastavit alespoň hlavičky. Pokud používáte proxy server nebo generujete obsah, může být nastavení mezipaměti HTTP užitečné. Sdílená objektová mezipaměť je užitečná pro specifické úlohy, jako je ukládání relací SSL nebo ověřovacích údajů, pokud používáte backendového poskytovatele. Ukládání souborů do mezipaměti lze pravděpodobně omezit na ty, kteří mají pomalé systémy.

Leave a Reply