A webhely teljesítményének javítása az Apache gyorsítótárazásának engedélyezésével

Á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.

  1. 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
  2. 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
  3. 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.

  1. 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
  2. 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.

  3. 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.

  1. 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.

  1. 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
  2. Mentés a változtatásokról.
  3. 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/ 

Szólj hozzá!