Áttekintés
A legtöbb webhely nagy mennyiségű olyan tartalmat tartalmaz, amely változatlan marad, vagy a közzététel után ritkán módosul. És minden alkalommal, amikor a webkiszolgálótól kérik, akár módosítva van, akár nem, újra feldolgozzák és továbbítják az ügyfélnek, feleslegesen fogyasztva az értékes rendszererőforrásokat és a hálózati sávszélességet. Ahogy webhelye vagy alkalmazása népszerűsége növekszik, egyre nagyobb igényt támasztunk a szerverrel szemben olyan tartalmak feldolgozására, amelyek bár dinamikusan generáltak, mégis statikusak.
Ez nem hatékony erőforrás-felhasználás, és végül sok pénzébe fog kerülni, mivel több hardvert kell telepítenie, hogy lépést tartson a terheléssel. Ez az, ahol a gyorsítótárazás jön a képbe. Ne pazaroljuk a CPU-ciklusokat vagy a RAM-ot a korábban elért tartalom feldolgozására, amely valószínűleg nem fog megváltozni egy meghatározott időn belül. Ehelyett szolgáljunk ki előre feldolgozott tartalmat, amelyet ideiglenesen a szerveren vagy a webböngésző gyorsítótárában tárolunk. És csak a tartalom módosítása vagy egy meghatározott idő elteltével dolgozzuk fel újra a kért tartalmat.
Caching beállítása az Apache-ban
Az Apache három modullal rendelkezik a tartalom gyorsítótárazásához, az egyik engedélyezi, a másik kettő pedig meghatározza, hogy a gyorsítótár hol létezik – a lemezen vagy a memóriában. Annak meghatározása, hogy melyik modult használjuk a gyorsítótár tárolására, a rendelkezésre álló hardveres erőforrásoktól és a teljesítményigénytől függ.
A lemezről történő tárolás lassú, de kevésbé költséges. A memóriából történő kiszolgálás gyors, de drága – mind költségben, mind erőforrás-fogyasztásban. A lemezes gyorsítótár teljesítményét azonban növelheti, ha a hagyományos forgó lemez helyett SSDFLASH tárolóra helyezi.
- Győződjön meg arról, hogy a cache_modul betöltődik az Apache által, az alábbi sor létezésének ellenőrzésével az Apache kiszolgáló konfigurációs fájljában, megjegyzések nélkül.
LoadModule cache_module modules/mod_cache.so
- A lemezes gyorsítótár esetében győződjön meg arról, hogy a disk_cache_modul betöltődik az Apache által. Keresse meg a következő sort, javítatlanul.
LoadModule disk_cache_module modules/mod_disk_cache.so
- Adja hozzá a következő sorokat vagy az Apache kiszolgáló konfigurációs fájljához (globálisan), vagy egy VirtualHost direktíván belül (alkalmazás lokalizáltan).
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-admin
CacheEnable disk / A “/” relatív könyvtár lemezre történő gyorsítótárazásának kikapcsolása.
Cacheroot A gyorsítótár tárolási könyvtárának beállítása, ahová az összes gyorsítótárazott tartalom mentésre kerül.
CacheDefaultExpire Az eredeti kérés dátumához viszonyított alapértelmezett lejárati idő beállítása másodpercben.
CacheDisable Kikapcsolja a gyorsítótárazást az opciót követő relatív elérési utak esetében. Az érzékeny és a nem gyorsítótárazandó területeket ide kell beírni.
A tartalom lejáratának beállítása
A gyorsítótárazáshoz lejárati dátum szükséges, hogy működjön. A tartalom lejárati dátuma nélkül a gyorsítótár nem tudja megállapítani, hogy a tartalom elavult-e vagy sem.
Az Apache Mod_Expires
Ez a modul lehetővé teszi a tartalom lejárati dátumának meghatározását, egészében vagy egyenként, típus vagy megfelelő karakterlánc alapján.
- Győződjön meg arról, hogy a modul betöltődik-e az Apache-ba. Nyissa meg a szerver konfigurációs fájlját (httpd.conf a CentOS rendszerben), és keresse meg ezt a sort. Ha ki van kommentálva egy ‘#’-vel, akkor vegye ki a megjegyzését.
LoadModule expires_module modules/mod_expires.so
- Adja hozzá a következő sorokat vagy az Apache szerver konfigurációjához, vagy egy virtuális hoszt konfigurációjához, vagy egy könyvtár utasításhoz, vagy .htaccess-be, attól függően, hogy hol szeretné beállítani a gyorsítótárazási irányelvet.
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day"</IfModule></pre>
ExpiresActive On Bekapcsolja a mod lejárati idejét.
ExpiresDefault Beállítja az összes tartalom alapértelmezett lejárati idejét. Access plus 1 day a tartalom hozzáférési ideje + 1 napra állítja be a lejárati időt, ami azt jelenti, hogy a tartalom 24 órán át lesz gyorsítótárban tárolva.
- Ha különböző lejárati értékeket szeretne hozzárendelni bizonyos tartalomtípusokhoz, akkor az ExpiresByType opciót használhatja az ExpiresDefault opció mellett vagy anélkül. Íme néhány példa:
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day" ExpiresByType image/jpg "access plus 5 days" ExpiresByType image/jpeg "access plus 5 days" ExpiresByType image/gif "access plus 5 days" ExpiresByType image/png "access plus 5 days" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year"</IfModule>
HTP fejlécek használata a webes alkalmazásban
A lejárati és utolsó módosítási dátumokat a webes alkalmazás HTTP fejléc paraméterek segítségével határozhatja meg. Ezáltal a tartalom frissességének ellenőrzése a fejlesztők vagy az alkalmazás kezébe kerül. Ennek módja az alkalmazástól függ.
- HTML
Használja a Meta taget, és határozza meg a tartalom korát. Az alábbi példában állítsa a gyorsítótárat privátra (csak a kérő ügyfél) és a maximális életkort 1 órára (3600 másodpercre).<meta http-equiv="Cache-control" content="private,max-age:3600">
- PHP
A Header() függvényt használja a tartalom életkorának beállításához a dokumentumok fejlécében.header("Cache-Control: private, max-age=3600");
Nem lejáró tartalmak gyorsítótárba helyezése
Néha olyan tartalmakat kell gyorsítótárba helyezni, amelyeknek nincs lejárati ideje beállítva. Mint korábban említettük, a lejárati dátumok alapértelmezés szerint a gyorsítótárazási mechanizmus működésének feltételei. Azonban utasíthatjuk az Apache-ot, hogy a lejárati dátumot nem definiált lejárati dátummal nem rendelkező tartalmakhoz alapértelmezett lejárati dátumot csatoljon, és azt gyorsítótárba helyezze. A CacheIgnoreNoLastMod lehetővé teszi ezt számunkra.
- Adja hozzá a CacheIgnoreNoLastMod opciót On értékkel ahhoz a helyhez, ahol engedélyezte a gyorsítótárazást – az Apache kiszolgáló konfigurációs fájljába vagy egy Virtual Hosts konfigurációs fájlba.
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod On
A böngészők tartalom gyorsítótárazásának megakadályozása
A fenti gyorsítótárazási konfigurációkkal az a probléma, hogy az alkalmazás tartalma két helyen kerül gyorsítótárazásra: a kliensen és a kiszolgálón. Ha frissíted a tartalmat, és azt szeretnéd, hogy a felhasználó azonnal lássa, előfordulhat, hogy nem tudja, ha a helyileg gyorsítótárazott verzió még nem járt le. Lerövidítheti a lejárati időt, de akkor teljesen meghiúsíthatja a gyorsítótárazás célját.
Ehelyett vegye át a teljes irányítást a gyorsítótárazás felett, és engedélyezze azt csak a kiszolgálón. Kényszerítse a webböngészőt, hogy minden egyes kérésnél a kiszolgálótól szerezze be a tartalmat, de például előfeldolgozott Java- vagy PHP-tartalmat szolgáljon ki, hacsak a tartalom nem változott. Ez biztosítja, hogy a felhasználó mindig a legfrissebb verziót lássa, miközben nem pazarolja feleslegesen a CPU-ciklusokat vagy a RAM-ot az újrafeldolgozásra.
- Adja hozzá a CacheIgnoreCacheControl opciót a gyorsítótárazást engedélyező helyhez – az Apache kiszolgáló konfigurációs fájljához vagy a virtuális hoszt konfigurációjához – On értékkel . Ennek hatására az Apache figyelmen kívül hagyja a böngésző tartalomfrissítési kéréseit. Minden tartalom a kiszolgáló gyorsítótárából kerül kiszolgálásra, ahol lehetséges, amíg az le nem jár.
CacheEnable disk /CacheRoot /webapps/cache/app1CacheDefaultExpire 3600CacheDisable /wp-adminCacheIgnoreNoLastMod OnCacheIgnoreCacheControl On
- Mentés a változtatásokról.
- A változtatások alkalmazásához indítsa újra az Apache-ot.
WordPress és más alkalmazáskeretek
A WordPress és a CodeIgniterhez hasonló keretrendszerek minden tartalmat az Index.php fájlon keresztül irányítanak. Attól függően, hogy hogyan írta meg a mod_rewrite szabályait, a gyorsítótárazott tartalom helytelenül fog megjelenni. Előfordulhat, hogy egy kért oldal, kategória stb. tartalma jelenik meg a ténylegesen kért tartalom helyett.
Az ellene való küzdelemhez biztosítanunk kell, hogy az Apache gyorsítótár figyelembe vegye az index.php végéhez csatolt paramétereket a tartalom gyorsítótárazása és lehívása során. Módosítsuk az index.php átírási szabályát az alábbi példában látható módon.
# WordPress Permalink rewritesRewriteBase /RewriteRule ^index.php$ – RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php/