- Anthony Heddings
- July 29, 2020, 11:00am EDT
Minden felhasználó böngészője egy beépített gyorsítótárat használ a letöltött objektumok tárolására, ami jelentősen felgyorsíthatja a webhely ismételt látogatását, mivel a hálózat helyett a lemezről tölt be. Íme, hogyan kell ezt beállítani az Apache-ban.
Hogyan működik a gyorsítótárazás?
Amikor egy felhasználó először csatlakozik a webhelyéhez, letölti az oldal megjelenítéséhez szükséges összes statikus erőforrást, beleértve olyan dolgokat is, mint a logója. Amikor egy új oldalra navigálnak, az a logóját a memóriából tölti be, ahelyett, hogy újra lekérné, jelentősen felgyorsítva ezzel a teljesítményt és csökkentve a webszerver terhelését a folyamat során.
Ez egy ügyféloldali gyorsítótár, de sok webhely egy tartalomszolgáltató hálózatot, vagy CDN-t is igénybe vesz. A CDN egy olyan szerverhálózat, amely a fő webszerver vagy “origin” szerver előtt helyezkedik el. Ez a hálózat gyorsítótárba helyezi az oldalakat, növelve a maximális sávszélességet, csökkentve a hozzáférési késleltetést, és jelentősen csökkentve a származási szerverre nehezedő terhelést. Ha többet szeretne megtudni a CDN-ekről, itt olvashatja el a róluk szóló útmutatónkat.
Cache-Control
egy fejléc, amelyet úgy konfigurálhat, hogy webkiszolgálója minden kimenő kéréshez hozzáadja, és amely megmondja a böngészőnek és a CDN-eknek, hogyan kell gyorsítótárazni a tartalmát.
Bizonyos oldalakat soha nem szabad a CDN-ekhez hasonló megosztott gyorsítótárakkal gyorsítótárazni. Ezzel azt kockáztatjuk, hogy az egyik felhasználó személyes adatai megjelennek mások számára. Általános szabályként, ha az oldal minden felhasználó számára pontosan ugyanaz lesz, mint például a kezdőlapja, akkor gyorsítótárba helyezheti. Ha bizalmas felhasználói adatokat jelenít meg, akkor feketelistára kell tennie a gyorsítótárból. A statikus erőforrások, például a CSS és a képek általában mindenki számára gyorsítótárba helyezhetők, gyakran sokkal hosszabb ideig.
Az is fontos, hogy mennyi időt töltenek az objektumok a gyorsítótárban. Az úgynevezett Time-To-Live (TTL), a gyorsítótárban tárolt erőforrások maximális életkora határozza meg, hogy az objektum mennyi ideig marad a gyorsítótárban, mielőtt érvénytelenné válik, és felszólítja a felhasználót, hogy kérjen új objektumot. Az olyan statikus erőforrások esetében, amelyek nem változnak sokat, nagyon magas TTL-értékeket állíthat be, általában két év körüli értékeket. Az olyan dolgok esetében, amelyeket esetleg frissíteni szeretne, alacsonyabb TTL-értékeket érdemes beállítani, hogy az elavult erőforrások ne maradjanak túl sokáig a gyorsítótárban.
A gyorsítótár újratöltését bármikor kiválthatja verziószámozott fájlnevekkel. Ha egy CSS stíluslap új verzióját adja ki, elnevezheti styles-1.0.1.css
-nek, és a felhasználó böngészője (és az előtte lévő CDN-ek) új fájlként fogja látni, amelyet újra le kell tölteni. Ezenkívül egyes CDN-ek esetében manuális érvénytelenítéseket is kiadhat a meglévő gyorsítótár kiürítéséhez anélkül, hogy megváltoztatná a fájlneveket.
How to Use Cache-Control in Apache
Cache-Control
has a few options:
-
public
– May be cache by anyone, including browsers and CDNs. Ezt használja a legtöbb statikus objektumhoz. -
private
– Érzékeny adatokat tartalmaz, amelyeket CDN-ek vagy fordított proxyk nem gyorsítótárazhatnak. A felhasználó böngészője helyben gyorsítótárba helyezheti. Ezt használja a legtöbb hitelesített oldalhoz. -
no-cache
– A neve ellenére nem tiltja le a gyorsítótárazást. A böngésző a teljesítmény érdekében továbbra is gyorsítótárba helyezheti a választ, de használat előtt ellenőriznie kell az eredetkiszolgálóval a frissítéseket. Ezt akkor használja, ha azt szeretné, hogy a felhasználó minden alkalommal újraértékelje. -
no-store
– Teljesen letiltja a gyorsítótárazást. Ezt csak nagyon érzékeny adatok esetén használja, amelyeket nem szabad kétszer elküldeni.
Kiegészítésképpen hozzáadhatja a no-transform
direktívát, amely letiltja az erőforráson végzett esetleges átalakításokat. Egyes CDN-ek például a sávszélesség csökkentése érdekében tömörítik a képeket. Ez a direktíva letiltja ezt a viselkedést.
Az Apache-ban ezt a fejlécet manuálisan kell beállítania a Header set
direktíva segítségével, például így:
Header set Cache-Control "max-age=84600, public"
A max-age
érték másodpercekben van megadva, például max-age=300
ötperces TTL esetén, és max-age=63072000
kétéves TTL esetén.
Ezt az irányelvet a konfiguráció gyökerébe is elhelyezheti, hogy az egész webhelyre érvényes legyen, de jobb módszer, ha a beállításokat a fájl típusától függően alkalmazza. Ha például a legtöbb statikus adathordozóra magas TTL-t szeretne beállítani, használhatja a FilesMatch
blokkot:
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=63072000, public" </FilesMatch>
Ha egy adott elérési útvonalat feketelistára akarja tenni, hogy a CDN-ek ne tudják gyorsítótárba helyezni, használhatja a Directory
blokkot:
<Directory "/private"> Header set Cache-Control "max-age=300, private" </Directory>
Vagy egyszerűen csak egyetlen fájlra:
<File "protected.html"> Header set Cache-Control "max-age=300, private" </File>
A specifikusabb egyezéseket tartalmazó blokkok elsőbbséget élveznek az általános regex egyezésekkel szemben, de ellenőrizni kell, hogy minden megfelelően van-e beállítva a fogadó oldalon. Ezt ellenőrizheti a Chrome DevTools programjában, a Network > Headers alatt.
Ha csak a .htaccess
konfigurációhoz van hozzáférése, akkor is használhat könyvtárillesztést, ha minden alkönyvtárban létrehoz egy új .htaccess
fájlt.
A Surrogate-vezérlő használata a CDN viselkedésének közvetlen módosításához
A Surrogate-Control
fejléc pontosan úgy működik, mint a Cache-Control
, de a végfelhasználók helyett a CDN-eknek és a fordított proxyknak szóló konkrét utasításokat részletezi. Így a CDN-eknek megmondhatja, hogy egy dolgot csináljanak, de más irányokat küldjenek a böngészőnek.
Ezt a fejlécet manuálisan kell beállítania, ugyanúgy, ahogyan a Cache-Control
-t.:
Header set Surrogate-Control "max-age=300, public"
Mindenképpen tesztelnie kell a CDN-ével, hogy meggyőződjön arról, hogy ez működik – a Surrogate-Control
meglehetősen új, és nem általános.
Anthony Heddings a LifeSavvy Media rezidens felhőmérnöke, műszaki író, programozó és az Amazon AWS platformjának szakértője. Több száz cikket írt a How-To Geek és a CloudSavvy IT számára, amelyeket több millióan olvastak el.Teljes életrajz elolvasása ”