A Cache-Control fejlécek beállítása az Apache-ban

  • Anthony Heddings
  • July 29, 2020, 11:00am EDT

apache

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.

Hirdetés

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.

Hirdetés

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.

chrome devtools network tab

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.

Hirdetés

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.