Ez az útmutató bemutatja, hogyan kell helyesen konfigurálni a fejléc lejárati beállításait az Apache segítségével, optimalizálva a webszerver teljesítményét statikus fájlok, például képek, CSS vagy JavaScript fájlok kiszolgálásakor.
A kiszolgálón sok sávszélességet tárolnak a fájlok minimális dátumának megadásával. Ennek eredményeként a kliens böngésző gyorsítótárának használatával a hosztolt webhelyek gyorsabban betöltődnek.
Először csatlakozzon a szerverhez SSH kapcsolaton keresztül. Ha még nem tette meg, akkor ajánlott átböngésznie a Hogyan javítható az SSH biztonság az Ubuntu 18.04-en? útmutatónkat a folyamat megkezdése előtt. Helyi szerver esetén folytassa a következő lépéssel, és nyissa meg a szerver terminált.
A szükséges modulok engedélyezése
A szükséges Fejlécek küldésének engedélyezéséhez először engedélyezze a kapcsolódó Apache modult:
Ezután indítsa újra a szolgáltatást:
$ sudo service apache2 restart
Modul konfigurációja
A modul konfigurációja az alábbiak szerint illeszthető be:
-
Apache konfigurációban: az összes Apache által ellenőrzött webhely (virtuális és nem virtuális gazdagépek) örökli
-
Virtuális gazdagép-tárolóban
-
A <Directory> irányelvben vagy .htaccess fájlban
A következő példában az alapértelmezett helykonfigurációba kerül beillesztésre:
$ sudo vim /etc/apache2/sites-available/000-default.conf
Ezután adja hozzá a következő konfigurációt:
<IfModule mod_expires.c>
<FilesMatch "\.(jpe?g|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 week"
</FilesMatch>
</IfModule>
A FilesMatch irányelv révén meghatározzuk, mely fájlokat kell az ügyfél böngészőjének megőriznie (ebben az esetben css, jpg, png, gif és js). Míg az ExpiresDefault segítségével megadjuk, hogy meddig kell őket (ebben a példában egy hét) megőrizni.
A módosítások alkalmazásához indítsa újra az Apache-t:
$ sudo service apache2 restart
A FilesMatch és az ExpiresDefault metódus mellett az ExpiresByType használható a fejléc lejáratának beállítására minden fájltípushoz, például:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpg "access plus 60 days"
ExpiresByType image/png "access plus 60 days"
ExpiresByType image/gif "access plus 60 days"
ExpiresByType image/jpeg "access plus 60 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/javascript "access plus 1 week"
</IfModule>
Ennek a módszernek az alkalmazásával részletesebb vezérlés érhető el a gyorsítótár időtartamáról, és az Ajax adatok gyorsítótárazása a mime típusú alkalmazás / javascript beillesztése nélkül érhető el.
Mindkét irányelv esetében a gyorsítótár időtartamának megadására szolgáló szintaxis megegyezik, vagyis:
“[base] plus [valore] [tipo] [valore] [tipo] [valore] [tipo] …”
Az alapérték lehet:
Míg a típusnak a következő értékei lehetnek:
-
years: évek
-
months: hónapok
-
weeks: hetek
-
days: napok
-
hours: órák
-
minutes: percek
-
seconds: másodpercek
Néhány példa a konfigurációra:
# One year cache expiry
ExpiresByType image/jpeg "access plus 1 year"
#Furthermore, more than one unit of measurement in sequence can be added. For example:
# Set 1-month, 15- day and 2-hour expiry
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
# Cache expiry from the file modification date more than 5 hours and 3 minutes
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
Ne feledje, hogy ha meg kell változtatnia egy gyorsítótárazott fájl tartalmát, akkor azt a kliensek nem töltik le, amíg a gyorsítótárazás ideje le nem jár. Ez meghibásodásokat okozhat webhelyein.
Bár a klienseket nem lehet arra kényszeríteni, hogy figyelmen kívül hagyják a korábban mentett gyorsítótárat, a probléma elkerülésére többféle technika is alkalmazható.
Gyakran használt módszer az éppen módosított fájl átnevezése (például: style.css-ről style-v2.css-re), vagy a hivatkozások módosítása verziószám hozzáadásával, például:
<script src="https://www.domain.com/js/myScript1.js"></script>
a következőre:
<script src="https://www.domain.com/js/myScript1.js?v=3.1"></script>