az internet ablakok Android

Statikus gyorsítótár beállítása a Nginx használatával a Debianban. A tömörítés és a gyorsítótár konfigurálása a Nginx és az Apache gyorsítótárazás http fejlécek segítségével a Nginx szerveren

A HTTP fejléc több más címsorral is lejár, például a gyorsítótárvezérlés lehetővé teszi, hogy kezelje a gyorsítótárat, ezáltal jelentse, hogy mennyi ideig tart a kért tartalom. Az "élettartam" lejár, a gyorsítótár megszűnik, hogy releváns legyen, és szükség van az eredeti erőforrás kérésére, hogy megtudja-e a tartalom változásait. A lejárati fejléc a HTTP protokollban szabályozott szabványos címsor, és szinte bármilyen gyorsítótár támogatja. Ami a gyorsítótárvezérlő fejlécet illeti, a http / 1.1-ben vezették be, ezáltal lehetővé téve, hogy lehetővé tegye a webmesterek lehetőséget, hogy nagyobb ellenőrzést végezzen a tartalom felett, és megoldja a lejárati korlátozások megoldását. A gyorsítótár-szabályozás hatékony használatához javasoljuk, hogy jelezze a gyorsítótárat, amelyre a gyorsítótár releváns.

Ebben a hozzászólásban azt vizsgáljuk, hogy példákat állapítunk be a Nginx lejárati paraméterének beállítására. Először próbáljuk meg a beállítások maximális gyorsítótár tárolási idejét állítani.
Tegye a gyorsítótárat a maximális időre

Szerver (... hely ~ * ^. + \\. (Jpg | gif | png) $ (lejár Max,) ...)

A napokban gyakori gyorsítótárazási időértéket lehet megadni, feltételezzük, hogy a beállítások 7 napot kell beállítani, úgy nézzen ki, mintha ez lenne a következők.
Tegye a gyorsítótárat egy hétig

Szerver (... hely ~ * ^. + \\. (JPG | GIF | png) $ (lejár 7D;) ...)

Így a böngésző a fájlok első kérésére csak 7 nap után kéri őket. Mindezek az idő állnak a felhasználói böngésző gyorsítótárában. Lehetőség van arra is, hogy a gyorsítótár életének időpontját az utolsó fájlváltozás pillanatában számolja.
Tegye a gyorsítótárat az utolsó fájlváltozás pillanatában

Szerver (... hely ~ * ^. + \\. (JPG | GIF | png) $ (lejár a módosított 3D;) ...) ...)

Ezzel a módszerrel, ennek eredményeként megkapjuk a gyorsítótár időt, ami a fájl utolsó módosításának időpontjától függ. Az utolsó módosítás óta a böngésző 3 nap múlva kéri a fájlt. Bizonyos feladatokhoz ilyen gyorsítótárazási módszer lehet kényelmesebb.
A böngészőfájlok gyorsítótárazását is letilthatja, hogy ezt a paraméter értékét állítsa be.
A böngészőben található fájl gyorsítótárca letiltása

Szerver (... hely ~ * ^. + \\. (JPG | GIF | png) $ (lejár ",) ...)

Az így megadott érték teljesen letiltja a gyorsítótár-ellenőrzési műveletet. A gyorsítótárazás használatával az ügyfélrész elkerüli a teljes tartalom letöltésének szükségességét, mert Már rendelkezik helyi másolatokkal. A gyorsítótárazás idejének beállítása érdekében érdemesnek kell lennie, túl sok fanatizmus nélkül, nagyon hosszú gyorsítótár nem mindig racionális, ha a megváltozott adatok meglehetősen dinamikusan változnak.

A gyorsítótárazás (gyorsítótárazás) egy olyan technológia vagy folyamat, amely a gyors mentett információs fuvarozók (gyorsítótár, készpénz) másolatának megteremtését jelenti. Egyszerűen a helyszíni épületek valóságának egyszerűen elhelyezése és alkalmazása, amely az oldal vagy annak egy részének statikus HTML-példányának létrehozása, amely a PHP szkriptekkel (vagy más más, valahogy perl, asp.net) használatával keletkezik, attól függően Mely nyelven írja a CMS webhelyen), és a lemezen tárolódik, RAM-ban, vagy akár részben a böngészőben (fontolja meg részletesebben az alábbiakban). Amikor az oldalt az ügyféltől (böngésző) kéri, ahelyett, hogy szkriptekkel gyűjtene, a böngésző megkapja a kész másolatát, amely sokkal gazdaságosabb az erőforrások tárolásának költségein, és gyorsabban, ahogy átadja a kész oldalt kevesebb időt vesz igénybe (néha jelentősen kevesebb), hogyan lehet újra létrehozni.

Miért használja a gyorsítótárazást az oldalon

  • A terhelés csökkentése a tárhelyen
  • A böngésző webhely tartalmának gyors helyreállítása

Mindkét érv, azt hiszem, nem kell a megjegyzésekben.

Hátrányok és negatív hatás a webhely gyorsítótárazása

Furcsa módon, a webhely gyorsítótárca saját mínuszokkal rendelkezik. Először is, ez vonatkozik a webhelyekre, amelynek tartalma dinamikusan változik, amikor kölcsönhatásba lép. Gyakran ezek azok a webhelyek, amelyek a tartalmat vagy egy részét Ajax segítségével adják meg. Általánosságban elmondható, hogy a gyorsítótárazás AJAX is lehetséges, és még szükség van, de ez egy különálló beszélgetés témája, és nem érinti a hagyományosan használt technológiákat, amelyeket tovább fognak megvitatni.
Továbbá olyan problémák merülhetnek fel a regisztrált felhasználóktól, amelyekért az állandó gyorsítótár problémát jelenthet, amikor kölcsönhatásba léphet a webhely elemével. Itt általában a gyorsítótár ki van kapcsolva, vagy a webhely egyes elemeinek objektumának gyorsítótárazása: widgetek, menük és hasonlók.

Hogyan kell beállítani a webhelyén található gyorsítótárazást

Meg kell kezdeni, meg kell érteni, hogy mely technológiákat hagyományosan használják a helyszínek tartalmának gyorsítótározására.
Minden lehetséges módot 3 csoportra oszthatunk.

Szerver gyorsítótárazás

Caching a nginx

Htache Caching (Apache)

Ha csak a k.htaccess-hez érhető el, és a munkakiszolgáló csak az Apache, akkor olyan alkalmazások, mint GZIP tömörítés, és lejár a fejlécek böngésző gyorsítótár használatához.

Kapcsolja be a GZIP tömörítést a megfelelő MIME fájltípusokhoz

AddOutputFilterByType DEFLATE text / plain text / html AddOutputFilterByType DEFLATE text / css AddOutputFilterByType DEFLATE text / javascript application / javascript application / x-javascript AddOutputFilterByType DEFLATE text / xml application / xml application / xhtml + xml application / rss + xml AddOutputFilterByType DEFLATE application / json AddOutputFilterByType Az alkalmazás / vnd.ms-fontokject alkalmazás / X-FONT-TTF betűtípus / Opentype Image / SVG + XML kép / x-ikont

Kapcsolja be a fejléceket a statikus fájlokhoz 1 évig (365 nap)

Az ExpiresDefault "Hozzáférés plusz 365 nap" lejárata

Memcached gyorsítótárazás

Gyorsítótár a PHP gyorsítóval

Ha a motor motorja PHP-ben íródott, majd minden egyes letöltés bármelyik oldal a helyén, a PHP szkriptek kerülnek végrehajtásra: a kódot értelmező beolvassa a szkriptek a programozó, generál bytecode őket, tiszta gép, végrehajtja és megadja az eredményt. A PHP-gyorsító lehetővé teszi, hogy kizárja a BaitCode állandó generációját, gyorsítsa meg a készállomás kódot a memóriában vagy a lemezen, ezáltal növelje a termelékenységet és csökkentse a PHP által eltöltött időt. A mai napig támogatott gyorsítók közül:

  • Windows gyorsítótár kiterjesztése a PHP számára
  • Xcache
  • Zend Opcache.

A PHP 5.5-ös verziójában a gyorsító már beépült Zend Opcache.Ezért a gázpedál bekapcsolásához csak frissítse a PHP verziót

Helyszíni gyorsítótárazás

Szabályként ez azt jelenti, hogy a CMS helyének lehetősége a statikus HTML oldalak készítésére. A népi motorok és keretek többsége ilyen lehetőséget biztosít. Személy szerint, a Smarty, Wordpress-vel dolgoztam, így biztosíthatom, hogy tökéletesen megbirkózzanak a munkájukkal. Az eredeti WordPress ki a dobozból nincsenek gyorsítási képességeket, hogy szükség van olyan kevés betöltött projekt, de sok népszerű plug-inek caching:

  1. amely csak a helyszín statikus oldalainak generációjával foglalkozik;
  2. Hyper Cache, amely lényegében ugyanaz, mint az előző plugin;
  3. Db gyorsítótár. A munka lényege az adatbázisba való lekérdezések gyorsítótárazása. Szintén nagyon hasznos funkció. Két korábbi pluginnal ellátott kötegben használható;
  4. W3 teljes gyorsítótár. A desszerthez hagyta, ez a kedvenc pluginom a WordPress-ben. A helyszínt vele átalakítják, egy kemény buszról egy versenykocsira fordítva. Hatalmas előnye egy hatalmas funkciók, mint számos gyorsítótárazási lehetőség (statikus, gyorsító, memcached, adatbázis-kérések, objektum és oldali gyorsítótároló), összekapcsolás és kódkibocsátás (CSS-fájlok kombinálása és tömítése, JavaScript, tömörítési html az eltávolítás miatt szóközök), CDN és sokkal többet használva.

Mit mondhatok - használja a helyes CMS-t, és a magas színvonalú gyorsítótárazás szinte a dobozból elérhető lesz.

Keching a böngésző (kliens) oldalán, gyorsítótárfej

Kecsítés a böngészőben lehetséges, mert minden önbecsülő böngésző lehetővé teszi és ösztönzi. Talán ez a http címsor, hogy a kiszolgáló adja az ügyfelet, nevezetesen:

  • Lejár;
  • Gyorsítótárvezérlés: max-kor;
  • Utoljára módosítva;
  • ETAG.

Köszönjük nekik, a felhasználók, akik ismételten belépnek a webhelyre, rendkívül kevés időt töltenek az oldalak letöltéséhez. A gyorsítótárazási fejléceket az összes gyorsítótárazott statikus erőforrásra kell alkalmazni: sablonfájlok, képek, JavaScript és CSS fájlok, ha vannak, PDF, Audio és videó, stb.
Javasoljuk, hogy a címeket úgy állítsák meg, hogy a szakaszokat legalább egy hétig tárolja, és legfeljebb egy év, a legjobb év.

Lejár.

Az elévülési fejléc felelős milyen hosszú a cache jelentősége van, és a böngésző is használhatja gyorstárazott források igénylése nélkül az új verzió a szerverről. Erős és rendkívül kívánatos használni, mivel szükségszerűen cselekszik. A cím ajánlott, hogy jelezze a héttől egy évig. Több mint egy éve jobb, ha nem jelzi, hogy ez az RFC szabályok megsértése.

Például a Nginx-ben történő beállítása az összes statikus fájlhoz (365 nap), a Nginx konfigurációs fájlban lévő kódnak jelen kell lennie.

Hely ~ * ^. + \\. (Jpg | jpeg | gif | png | svg | js | css | mp3 | ogg | mpe? G | Avi | zip | GZ | Bz2? | RAR | SWF) $ | SWF) $ | SWF) $ | SWF) $ | SWF) $ |

Gyorsítótárvezérlés: max-kor;

Cache-Control: Max-Age felelős azért.
Még előnyösebben a lejárati használat, mint a gyorsítótár-szabályozás miatt nagyobb előfordulási gyakoriság. Ha azonban lejár, és a gyorsítótárvezérlés ugyanabban az időben jelen lesz a címsorokban, akkor a prioritást a gyorsítótárvezérlésnek adják meg.

Nginxban Gyorsítótárvezérlés ugyanúgy fordul, mint a Lejár., az irányelv lejár: 365d;

Utolsó módosított és ETAG

Ezek a címek a digitális nyomatok elvén dolgoznak. Ez azt jelenti, hogy a Keshe minden egyes URL-címére saját egyedi azonosítója lesz. Utoljára módosítva. Az utolsó változás dátuma alapján hozza létre. Cím ETAG. Minden egyedi erőforrás-azonosítót használ (leggyakrabban ez a fájl vagy a hash tartalmának változata). Az utolsó módosított "gyenge" cím, mivel a böngésző heurisztikus algoritmusokat használ annak meghatározására, hogy egy elemet kérjen-e a gyorsítótárból.

A Nginx statikus fájlokhoz ETAG. és Utoljára módosítva. Alapértelmezés szerint. A dinamikus oldalaknál jobbak, akár jobb, ha nem jelzik, vagy ez egy olyan szkriptet kell létrehoznia, amely egy oldalt generál, vagy a legmegfelelőbb a megfelelően konfigurált gyorsítótár használatához, akkor a nginx gondoskodik a címsorokról. Például a WordPress számára, kihasználhatja.

Ezek a címsorok lehetővé teszik a böngésző számára, hogy hatékonyan frissítse a gyorsítótárazott erőforrásokat, küldje el a kérés küldése minden alkalommal, amikor a felhasználó kifejezetten újraindítja az oldalt. A feltételes lekérdezések nem adnak vissza teljes választ, ha az erőforrás nem változott a kiszolgálón, és így kisebb késéssel jár, mint a teljes kérések, ezáltal csökkentve a terhelést a tárhelyen és a válaszidő csökkentésével.

A lejárati és gyorsítótárvezérlés egyidejű használata: a max-kor redundáns, ugyanúgy, mint az utolsó módosított és az ETAG egyidejű használata. Használja a lejárati + etagot, vagy lejár a + utolsó modag.

Engedélyezze a gzip tömörítést statikus fájlokhoz

Természetesen a GZIP tömörítés nem vonatkozik a gyorsítótárra, mint az ilyen, azonban a forgalom nagyon mentésre kerül, és növeli az oldalak letöltési sebességét.

Hogyan lehet engedélyezni GZIP Static a Server (.... gzip ON; Gzip_Disable "MSIE6" Gzip_Types text / plain text / css Application / Alkalmazás JSON / XML alkalmazás / XML + RSS Szöveg / JavaScript Alkalmazás / javascript;), hogyan kell engedélyezni Gzip a statics számára, hogy engedélyezze a GZIP v.htaccess tömörítést, be kell illesztenie a következő kódot a fájl elejére: AddOutputFilterByType DEFLATE text / plain AddOutputFilterByType DEFLATE text / html AddOutputFilterByType DEFLATE text / xml AddOutputFilterByType DEFLATE text / css AddOutputFilterByType DEFLATE application / xml AddOutputFilterByType DEFLATE application / xhtml + xml AddOutputFilterByType DEFLATE application / rss + xml AddOutputFilterByType DEFLATE application / javascript AddOutputFilterByType DEFLATE application / x- JavaScript.

A nem túl betöltött webhelyeken, a böngésző gyorsítótárazásának és pre-tömörítésnek köszönhetően lehetséges a gyorsítótárazás nélkül. Ebben a hozzászólásban vannak olyan irányelvek, amelyek csak az Apache HTTP-kiszolgáló működtetésére relevánsak. A kiszolgálói erőforrások megmentéséhez egyes hosterek letiltják az Apache-t, vagy nem telepítik azt egyáltalán, inkább csak kevésbé élvezetes webszervert konfigurálnak. Lássuk, hogyan konfigurálhatja az előzetes tömörítést és a böngésző gyorsítótárazását, ha csak a Nginx működik a tárhelyen.

1. Pre-Compression
Mielőtt megadná az oldalak tartalmát a látogató böngészőjébe, tömörítheti. A tömörítés csökkenti a továbbított fájlok méretét (néha többször), amely az oldal betöltési sebességének növeléséhez és a kimenő forgalom csökkentéséhez vezet. Csak a szövegrész - szöveg, HTML, PHP, JS, XML és más hasonló fájlokat kell tömöríteni. A szöveg jól összenyomott, még az alacsony tömörítéssel is, a továbbított falamok térfogata 50-80% -kal csökken. Természetesen a fájlok kicsiek, csak tucatnyi kilobájt, de ha úgy gondolja, hogy van több ezer ilyen fala, és naponta több ezer látogatót töltenek be, mint mondják, a világon egy szálon van - egy gallér , A megtakarítások jelentősek.

1-1. Pre-Compression / Apache
Azok számára, akik Apache-t tartalmazzák, meg kell találnod a fogadóból, milyen speciális modulokat hajtanak végre - mod_pagespeed vagy mod_defaflate? Általában az Apache 2x telepítése mod_defaft. Még mindig mod_gzip van, de a korábbi verziókban telepítették, így nem valószínű, hogy találkozik vele.

Ha a mod_pagespeed modul telepítve van, akkor a fájlban.htaccess, amely a webhely gyökerében van, be kell illeszteni:


Modpagespeed.
# Parancsok, filts stb

Ha a mod_defaflate modul telepítve van, akkor a fájlban.htaccess, amely a webhely gyökerében van, be kell illeszteni:


Addoutoutputfilterbytype deflate szöveg / html szöveg / sima szöveg / XML alkalmazás / XML alkalmazás / XHTML + XML szöveg / css szöveg / JavaScript alkalmazás / JavaScript alkalmazás / X-JavaScript


Ebben az esetben az összes szövegfájl tömörítésnek van kitéve - TXT, HTML, XML, XHTML, CSS, JS.

Vagyon httpd.conf. Található a / usr / helyi / ETS / Apache22 /:


AddoutOutputFilterbyType Deflate Application / JavaScript
AddoutoutputFilterbyType Deflate alkalmazás / X-JavaScript
AddoutoutputfilterbyType deflate szöveg / JavaScript
Addoutoutputfilterbytyp deflate szöveg / CSS

Browsermatch ^ Mozilla / 4 gzip-csak szöveg / html
Bressermatch ^ Mozilla / 4 \\ .0 Nem gzip
BROOKERMATCH \\ BMSIE! NO-GZIP! GZIP-Csak szöveg / html


Ezután újra kell indítania az Apache-t

/usr/local/etc/rc.d/apache22 újraindítás.

1-2. Pre-Compression / Nginx
Ha a hosting a Nginx alatt fut, az irányelvek különbözőek lesznek. A Fájlhoz.htAccess, amely a webhelyének gyökerében van, be kell illesztenie:

szerver (
Gzip be;
GZIP_TYPES TEXT / HTML szöveg / CSS alkalmazás / X-JavaScript szöveg / sima szöveg / XML kép / x-ikon;
}

1-3. Pre-Compression / Script
Ez megtörténik, hogy a kiszolgáló, amely biztosítja a blog működését, nem támogatja a mod_deflate vagy a mod_gzip. Ebben az esetben egy univerzális szkriptet igényelhet, amely az Apache-on és a Nginxen működik.

A motor által használt főfájlban, az elején, az első sorban, amelyet be kell illeszteni:

funkció isclientsupportgzip () () () () () (
Ha (fejlécek_sent () || Connection_aborted ()) visszaadja a hamis;
ha ("http_acept_encoding"), "gzip") \u003d\u003d\u003d FALSE) Visszatérés hamis;
Ha (Getnv ("http_user_agent"), "Konqueror")! \u003d\u003d FALSE) Visszatérés hamis;
Visszatér;
}

Ha (izclientsupportgzip ()) () ()) (
Ob_start ("ob_gzhandler");
}
MÁS (
Ob_start ();
}


Az összes ilyen irányelv eredménye az a tény, hogy a látogató böngésző kap egy tömörített oldal verziót - letölti azt, kicsomagolja az időfájljait, és normál formában jeleníti meg, és a képeket közvetlenül a webhelyről helyezze be. Minden modern brutes képes tömörített fájl opciókat használni, és azok, amelyek még mindig nem tudják, hogyan lehet tömörítetlen fájlokat kapni.

2. Böngésző gyorsítótárazása
A tömörítés mellett a böngésző segítségével a gyorsítótárazott másolatot használhatja. Miért letölti a fájlokat a webhelyről minden alkalommal, ha az utolsó látogatás óta nem változott? Jobb nyomon követni a fájlváltozásokat, és töltse le csak azok, akiket nekik alávetettek, és azok, amelyek a webhely utolsó megközelítéséből származnak, nem változtatják meg a gyorsítótárat. Ez a módszer lehetővé teszi a látogatók böngészője és a webhely hosting közötti forgalmat, ami az oldal betöltési idejének csökkenéséhez vezet. Különösen észrevehető a sebességű oldalak sebességének növelése. Valójában a képek nagyon ritkán változnak az oldalon, és miért szivattyúzzák őket minden alkalommal, már a böngésző gyorsítótárában vannak?

2-1. Böngésző gyorsítótárazása / telepítési fejlécek / Apache
Az Apache böngésző gyorsítótárazást biztosít a mod_expires és a mod_headers modulok segítségével: a mod_expires meghatározza a gyorsítótárazott adatok relevanciáját, és a mod_headers nyilvános hozzáférhetőségük. Az együttműködés rugalmas adathordozáshoz vezet a letöltés előtt: A böngésző speciális címsorokat kap, meghatározza, hogy a gyorsítótárban szereplő adatok elavultak-e az oldal utolsó látogatása óta, és ha elavultak, frissítik őket, új verziókat töltenek le, Fájlok, és ha nem elavult, akkor a fájlok a gyorsítótárból való letöltés nélkül jelenít meg fájlokat.

Ha apache van, add hozzá a fájlt a file.htaccess telepítéséhez a lejárati fejlécek lejárata:


Lejárati.
ExpiresDefault "Access Plus 5 Second"
EXPIRYTYTYTEY IMAGE / X-ICON "Access Plus 2592000 másodperc"
A kép / jpeg "hozzáférés plusz 2592000 másodperc"
A kép / png "hozzáférés plusz 2592000 másodperc"
A kép / gif "hozzáférés plusz 2592000 másodperc"
Az alkalmazás / X-Shockwave-Flash "hozzáférés plusz 2592000 másodperc"
A szöveg / CSS "Access Plus 604800 másodperc"
Lejárati szöveg / JavaScript "Access Plus 216000 másodperc"
Az alkalmazás / JavaScript "Access Plus 216000 másodperc"
Az alkalmazás / X-JavaScript "Access Plus 216000 másodperc"
Lejárati szöveg / html "Access Plus 600 másodperc"
EXPIRYTYTYPE ALKALMAZÁS / XHTML + XML "Access Plus 600 másodperc"


Ebben az esetben a különböző falámok gyorsítótár relevanciáját másodpercek alatt jelzik.

Ha Apache, a telepítéshez a gyorsítótárvezérlő fejléc beállítása, add hozzá a file.htaccess:






Fejléc beállítása gyorsítótárvezérlés "nyilvános"


Fejléc beállítása gyorsítótárvezérlés "magán"


Fejléc beállítása cache-control "privát, must-revidate"


Ebben az esetben a relevanciát az ICO, JPG, JPEG, PNG, GIF, SWF, CSS, JS, HTML, XHTML, PHP-ben ellenőrizzük.

2-2. Böngésző Caching / Nginx
Ha nincs apache, de van Nginx, annak érdekében, hogy megadhassa a böngészőt a Sugain adatok beviteléhez, be kell illesztenie a következő sorokat a Nginx konfigurációban:

hely ~ * \\. (JPG | PNG | GIF | JPEG | CSS | js) $ (
24 órát lejár;
}


Ebben az esetben a gyorsítótár relevanciája 24 óra, a hitelesített fájlok típusai szerepelnek - JPG, PNG, GIF, JPEG, CSS, JS.

Itt van a tényleges és az összes alapítvány, sikeres gyorsítja webhelyeit! ;)

A webszerver és a Reverse-Proxy Nginx nagyon erős lehetőségeket épített a HTTP válaszok gyorsítótározásához. Bizonyos esetekben azonban a dokumentáció és a példák nem elegendőek, ennek eredményeképpen nem minden olyan könnyen kiderül, és egyszerűen, ahogyan szeretném. Például a Configs Nginx-és a helyek vérben vannak írva. Ez a cikk megpróbálom enyhén javítani a helyzetet.

Ebben a cikkben: a) víz alatti kövek a teljes sávos gyorsítótárban; b) rotációval történő gyorsítótárazása; c) Dinamikus "ablak" létrehozása egy zashed oldalon.

Feltételezem, hogy egy csomó nginx + fastcgi_php-t használ. Ha a Nginx + Apache + MOD_PHP-t alkalmazza, cserélje ki az irányelvek nevét a fastcgi_cache * Proxy_Cache *

Ha úgy dönt, hogy az oldal a PHP oldalon vagy a Nginx oldalon található, választom a Nginx-t. Először is, lehetővé teszi, hogy másodpercenként 5-10 ezer kérelmet adjon meg anélkül, hogy nehézségekbe ütközik, és intelligens beszélgetések nélkül a "nagy terhelés". Másodszor, a Nginx egymástól függetlenül figyeli a gyorsítótár méretét, és ecsettel mindkettő az elavulás során, és amikor az adatok elmozdulnak.

Az egész oldal gyorsítótárazása teljes egészében

Ha a webhelyén a főoldal, bár dinamikusan generálódik, de ritkán változik, akkor erősen csökkentheti a szerver terhelését, az Schings-t Nginxban. A nagy részvétel, még rövid ideig is gyorsítótárazása (5 perc és kevesebb) már hatalmas teljesítménynövekedést ad, mert a gyorsítótár nagyon gyorsan működik. Még az oldal csak 30 másodpercig is elérheti a jelentős kiszolgáló kirakodását, miközben megmenti az adatfrissítés dinamikus dinamikáját (sok esetben 30 másodpercenként frissítések).

Például a főoldalt így kaphatja:

Fastcgi_cache_path / var / cache / nginx szint \u003d keys_zone \u003d wholePage: 50m; ... szerver (... Location / (... fastcgi_pass 127.0.0.1:9000; | $ http_if_none_match | $ host | $ host | $ Requid_uri "; # Garantáljuk, hogy a különböző felhasználók nem kapják ugyanazt a munkamenetet. Fastcgi_hide_Header" Set- Cookie "; # A Nginx gyorsítótárának foringing minden esetben, függetlenül attól, hogy a PHP-ben mutatták be a # gyorsítótárazó fejléceket. Fastcgi_ignore_Headers" cache-control "" lejárt ";)

Nem fogok nagymértékben eltúlozni, ha azt mondom, hogy az egyes sort ebben a konfigurációban a vér írja. Itt sok buktató van, fontoldunk meg mindent.

fastcgi_cache_path: könnyű hibakeresés is fontos

fastcgi_cache_path / var / cache / nginx szint \u003d keys_zone \u003d wholePage: 50m;

A FASTCGI_CACHE_PATH irányelvben "üres" értéket mutatok a szintekhez. Bár ez kissé csökkenti a teljesítményt (a fájlok közvetlenül a / var / cache / nginx-ben kerülnek létrehozásra, a könyvtárak felosztása nélkül), de nagyságrendet ad a hibakereséshez és a gyorsítótár problémáinak diagnosztizálásához. Hidd el nekem, nem lesz időd a kezeddel, hogy mászzunk a / var / cache / nginx-be, és nézd meg, hogy mit tárolnak ott.

fastcgi_cache_valid: A válaszkód 304-es gyorsítótárca is

fastcgi_cache_valid 200 301 302 304 5m;

A FastCGI_CACHE_VALID irányelvben a gyorsítótárat nemcsak a 200 OK-os szabványkódok, 301 állandóan és 302-et találtunk, hanem 304-et is nem módosítottunk. Miért? Emlékezzünk arra, hogy a 304-es eszközt jelenti. Két esetben üres válaszgal van kiadva:

  • Ha a böngésző elküldte az "If-módosított-óta: dátum" címet, amely időpontban többé-egyenlő az "utolsó módosított: dátum" válasz. Azok. Az ügyfél megkérdezi: "Van-e új verzió a dátum óta? Ha nem, 304-et adok, és megmentem a forgalmat. Ha van, adja meg az oldal testét. "
  • Ha a böngésző elküldte a címsorot "Ha-none-meccs: hash", ahol a hash az "Etag: Hash" válasz címével van ellátva. Azok. Az ügyfél megkérdezi: "Az oldal jelenlegi verziója különbözik attól, amit utoljára kértem? Ha nem, 304-et adok, és megmentem a forgalmat. Ha igen, adja meg az oldal testét. "

Mindkét esetben az utolsó módosított vagy az ETAG valószínűleg a Nginx gyorsítótárból, és a csekket nagyon gyorsan tartják. Nem kell "húzni" PHP-t, hogy a script adja meg ezeket a címsorokat, különösen annak fényében, hogy azokat a vevői, akik elhagyják a 200 választ, a cache-t kapják.

fastcgi_cache_key: Óvatosan dolgozzon függőséggel

fastcgi_cache_key "$ Request_Method | $ http_if_modified_since | $ http_if_none_match | $ host | $ receive_uri";

Különös figyelmet érdemel az értéket a FastCGI_CACHE_KEY irányelvben. Meghoztam az irányelv minimális munkaértékét. Lépjen jobbra, lépjen balra, és néhány esetben elkezdi, hogy "rossz" adatokat kapjon a gyorsítótárból. Így:

  • A $ Request_Method függőségét, mert szükségünk van rá, mert A fejkérelmek az interneten meglehetősen gyakoriak. A fej-queuity válasza soha nem tartalmazza a testet. Ha eltávolítja a $ Request_Method függőségét, akkor lehet, hogy valaki azt kérte, hogy valaki kérte, hogy kérdezze meg a fej oldalát a fej-módszerrel, majd megkapja az üres tartalmat.
  • A $ http_if_modificed_since függőségére van szükség, hogy a 304 válaszú gyorsítótár ne módosuljon, véletlenül az ügyfélnek adja meg a szokásos kérést. Ellenkező esetben az ügyfél üres választ kaphat a gyorsítótárból.
  • Ugyanaz a $ http_if_none_match. Biztosítani kell az üres oldalak kiadását az ügyfelek számára!
  • Végül a $ host és a $ Request_uri függőség nem igényel megjegyzéseket.
fASTCGI_HIDE_HEHIDER: Biztonsági problémák megoldása

fastcgi_hide_header "set-cookie";

A FASTCGI_HIDE_HEARER irányelv nagyon fontos. Anélkül, hogy komolyan kockáztatja a biztonságot: a felhasználók más emberek üléseit a cache munkameneti cookie-n keresztül kaphatják. (Igaz, a Nginx legújabb verzióiban valamit elvégeztünk a tényező automatikus számításának irányában.) Megértette, hogyan történik? Vasya pupkin jött az oldalra, ülés és munkamenet cookie volt. Hagyja, hogy a gyorsítótár abban az időben üres legyen, és Vasin Cookie-t írta neki. Ezután egy másik felhasználó jött, megkapta a választ a gyorsítótárból, benne - és Cookie Vasi. Tehát és az ülés is.

Természetesen azt mondhatod: ne hívjuk a session_start () a főoldalon, akkor nem lesz probléma a cookie-kkal. Elméletileg ez így van, de a gyakorlatban ez a módszer nagyon instabil. Az ülések gyakran elkezdik "elhalasztott", és elegendő a "véletlenszerűen" bármely részét, hogy olyan funkciót okozzon, amely hozzáférést igényel az üléshez, mivel a biztonságban lyukat kapunk. És a biztonság olyan dolog, hogy ha egy adott módszertanban lyukak lehetnek hanyagság, akkor ez a technika definíció szerint "lyuk". Ezenkívül vannak más cookie-k, kivéve a munkamenetet; Nem kell a gyorsítótárba rögzíteniük.

fASTCGI_IGHORE_HEAROK: A gépelés során nem adjuk meg a "hazugság" webhelyet

fastcgi_ignore_Headers "cache-control" "lejárt";

A Nginx szerver felhívja a figyelmet a gyorsítótárvezérlésre, lejárt és Pragma fejlécekre, amelyek a PHP-t adják. Ha azt mondják, hogy az oldal nem kell gyorsítótárat (vagy már elavult), akkor a nginx nem írja be a gyorsítótárfájlba. Ez a viselkedés, bár logikusnak tűnik, a gyakorlatban sok nehézséget okoz. Ezért blokkoljuk: a FastCGI_IGRORE_HEARERS köszönhetően bármely oldal tartalma a gyorsítótárfájlba esik, függetlenül a címsorától.

Mi ez a komplexitás? Ismét kapcsolódnak a Session and Session_start () funkcióhoz, amely alapértelmezés szerint PHP-ben állítja be a "gyorsítótárvezérlés: No-Cache" és a "Pragma: No-Cache" címsorokat. Három megoldás van a problémára:

  • Ne használja a Session_start () egy olyan oldalon, ahol a gyorsítótárat feltételezzük. E módszer egyik hátránya, már magasabbnak tartottuk: csak egy gondatlan mozgalom elegendő, és webhelye, amely másodpercenként több ezer kérést fogad el egy forrasztott főoldalra, azonnal "hazudik", amikor a gyorsítótár kikapcsol. A második mínusz - a gyorsítótárazási logikát két helyen kell kezelnünk: a Nginx konfigurációban és a PHP-kódban. Azok. Ez a logika "elkenőd" a rendszer teljesen különböző részein.
  • Állítsa be az ini_set ("session.cache_limiter", ""). Ez arra kényszeríti a PHP-t, hogy tiltsa le azokat a címsorok visszavonását, amelyek korlátozzák a gyorsítótárat, amikor az üléseken dolgoznak. A probléma itt megegyezik: "Smearing" logika a gyorsítótárazás, mert ideális esetben szeretnénk, ha az összes gyorsítótár egyetlen helyről.
  • Figyelmen kívül hagyja a Caching Ban fejléceket, amikor a FastCGI_IGRORE_HEHEARERS használatával gyorsítótárakat ír. Úgy tűnik, hogy ez egy Win-Win megoldás, ezért tanácsot adok neki.

Gyorsítótár forgás

A statikus főoldal nem olyan érdekes. Mi a teendő, ha sok anyag van a helyszínen, és a fő egyfajta "showcase" -ként működik számukra? Ilyen "Showcase" -nál kényelmes a "véletlen" anyagok megjelenítéséhez, hogy a különböző felhasználók különböző (és még egy felhasználó is kapott új tartalmat, újraindította az oldalt a böngészőben).

Feladat-megoldás - Forgó gyorsítótár:

  1. A forgatókönyvet arra kényszerítjük, hogy őszintén hozzák létre a főoldal elemeit véletlenszerű sorrendben, végrehajtva a szükséges kéréseket az adatbázisba (hagyja és lassan).
  2. Aztán nem egyedül tartjuk a gyorsítótárat, de mondjuk, 10 oldal opciók.
  3. Amikor a felhasználó belép a webhelyre, megmutatjuk az egyik ilyen lehetőség közül. Ugyanakkor, ha a gyorsítótár üres, a szkript indul, és ha nem, az eredmény visszaküldik a gyorsítótárból.
  4. Kicsit (például 1 perc) gyorsítótárat hozunk létre, így a nap különböző felhasználók "figyelte" a webhely összes anyagait.

Ennek eredményeképpen az első 10 kérés a generátor szkripthez "őszintén" és "betöltése" a szerver. De aztán "esik" a gyorsítótárban, és egy percen belül gyorsan kerülnek kiadásra. A teljesítmény növekedése, annál nagyobb a látogatók a helyszínen.

Itt van egy darab konfigurációs nginx, amely forgácsolással gyorsítószerszámot hajt végre:

Fastcgi_cache_path / var / cache / nginx szint \u003d keys_zone \u003d wholePage: 50m; Perl_set $ Rand "Sub (Return Int Rand 10)"; ... Server (... Hely / ... Fastcgi_pass 127.0.0.1:9000; ... # bekapcsolása cache és körültekintően válassza ki a gyorsítótárat gombot. Fastcgi_cache_Valid 200 301 302 304 1m; Fastcgi_Cache_Key „$ RAND | $ REQUEST_METHOD | $ http_if_modified_since | $ http_if_none_match | $ host | $ receive_uri "; # Garantáljuk, hogy a különböző felhasználók nem kapják meg ugyanazt a munkamenetet. Fastcgi_hide_header" Set-cookie "; "Cache-Control" "lejár"; # arra kényszerítve, hogy a böngésző minden egyes alkalommal újraindítsa az oldalt (forgatáshoz). Fastcgi_hide_Header "cache-control"; add_header cache-control "No-Store, No-Cache, Must-Revonate, Post- check \u003d 0, pre-check \u003d 0 ", fastcgi_hide_header" pragma ", add_header prragma" no-cache "; # korai friss utolsó módosított. Lejáratok -1; # Figyelem !!! Ez a sor lejár! Add_header Last-Modified! $ SENT_HTTP_EXPIRES;)))

Megfigyelheti, hogy az előző példával összehasonlítva újabb 6 irányelvet kellett hozzáadnom a helyszínen. Mindannyian nagyon fontosak! De nem fogunk előre jutni, mindent rendben kell tartani.

perl_set: Randomizátor függőség

perl_set $ Rand "Sub (Return Int Rand 10)";

Az irányelv Perl_set Minden egyszerű. Létrehozunk egy változót, amikor a Nginx használata hívja a beágyazott perl tolmács funkcióját. A szerző Nginx szerint ez egy meglehetősen gyors működés, így nem fogunk "megtakarítani a mérkőzéseket". A változó a HTTP-kérelmek mindegyikében 0 és 9 között véletlenszerű értéket vesz igénybe.

fastcgi_cache_key: A randomizátor függése

fastcgi_cache_key "$ rand | $ Request_Method | ...";

Most keverjük össze a véletlenszerű változót a gyorsítótárba. Ennek eredményeképpen 10 különböző gyorsítótárat kapunk ugyanazon az URL-en, amelyre szükségünk volt. Ami azt a ténynek köszönhetően, hogy a gyorsítótár csúszás által okozott szkript a véletlenszerű sorrendben a főoldal elemeit adja meg, 10 fajtát kapunk a főoldalról, amelyek mindegyike "él" 1 perc (lásd a FastCGI_CACH_VALID).

add_header: kényszerítheti a böngésző gyorsítótárát
Fastcgi_hide_header "cache-control"; Add_Header cache-control "No-Store, No-Cache, Must-Revidate, Post-Check \u003d 0, Pre-Check \u003d 0"; Fastcgi_hide_header "pragma"; add_header prragma "no-cache";

A fentiekben azt mondtuk, hogy a Nginx érzékeny a PHP szkript által kiadott gyorsítótárfejekre. Ha a PHP szkript visszaadja a "Pragma: No-Cache" vagy a "Cache-Control: No-Store" fejléceket (valamint még inkább, például a "cache-control: non-megőrzés, nem-kibocsátó) Nem mondtam, kinek a kalapja "), akkor a nginx nem fogja menteni a gyorsítótár fájlok eredményét. Különösen az ilyen viselkedés elnyomása érdekében a FastCGI_ignore_Headers (lásd fent).

Mi a különbség a "pragma: no-cache" között a "Cache-Control: No-Cache" között? Csak azért, mert Pragma - http / 1.0 örökség, és most támogatja a régi böngészők kompatibilitását. A http / 1.1 gyorsítótárvezérlést használ.

Azonban még mindig gyorsítótár van a böngészőben. És egyes esetekben a böngésző nem is próbálja meg kérni a kiszolgálót az oldal megjelenítéséhez; Ehelyett ki fogja kapni a saját gyorsítótárából. Mivel Van egy forgás, mi kényelmetlen számunkra: Végül is, minden alkalommal, amikor beírja az oldalt, a felhasználónak új adatokat kell látnia. (Valójában, ha még mindig szeretné elpárologni az egyik opciót, kísérletezhet a gyorsítótárvezérlő fejlécével.)

Az ADD_HEARER-irányelv csak a böngészőhöz juttatja a gyorsítótárazási tilalmadat. Nos, hogy ez a cím ne emelje meg véletlenül, először eltávolítjuk a HTTP válaszát, hogy rögzítettem a PHP parancsfájlt (és a Nginx gyorsítótárban rögzített): a Directci_Hide_Header irányelv. Végtére is, akkor, ha egy Nginx konfigurációt írsz, nem tudom, hogy ott van, hogy a PHP-t kimeneti (és ha a Session_start () használják, pontosan határozható meg). Hirtelen saját gyorsítótárvezérlő fejlécét fogja tenni? Aztán kettő lesz: PHP-Sleeve és hozzáadja az add_header-t.

lejár és az utolsó módosított: garantáljuk az oldal újraindítását
lejár -1; # Figyelem !!! Ez a karakterlánc lejárta! Add_header Last-Modified $ Sent_http_expires;

Egy másik trükk: az utolsó időre módosítanunk kell. Sajnos nincs változó a Nginx-ben, de mágikusan úgy tűnik, hogy megadja -1 -1 irányelv lejáratait.

Bár most már (2009. október) nem dokumentált, a Nginx a $ SENT_HTTP_XXX típusváltozókat hozza létre az egyes XXX válaszadagolóhoz, amelyet az ügyfélnek adott. Használjuk az egyiket.

Miért olyan fontos, hogy ezt a címet az aktuális idő? Minden nagyon egyszerű.

  1. Képzeljük el, hogy a PHP kiadott egy "utolsó módosított: non_dat" címet.
  2. Ez a cím kerül rögzítésre a nginx cache (ellenőrizheti: a példánkban a fájlok a / var / cache / nginx), majd elküldte a böngészőnek az ügyfélnek.
  3. A böngésző emlékezni fog az oldalra és a módosítás időpontjára ...
  4. ... Ezért a következő alkalommal, amikor belép a felhasználó az oldalon a HTTP kérés lesz a cím-kérdés „If-Modified-sinc: some_data”.
  5. Mit fog tenni a nginx? Ő kap egy oldalt a gyorsítótárából, szétszereli a címsorát, és hasonlítsa össze az utolsó módosítással, ha módosított-óta. Ha az értékek egybeesnek (vagy az első kisebb lesz, mint a második), akkor a Nginx visszaadja a "304 nem módosított" választ egy üres testtel. És a felhasználó nem fog megjelenni semmilyen forgatást: megkapja, amit már látott korábban.

Valójában nagy kérdés, mivel a böngésző úgy viselkedik, ha egy sorban egyidejűleg módosított és gyorsítótár-kontroll nem gyorsítótár van. Vajon egy módosított - lekérdezésre kerül sor? Úgy tűnik, hogy a különböző böngészők itt különböző módon viselkednek itt. Kísérlet.

Van még egy ok arra, hogy manuálisan végezze el az utolsó módosítást. A tény az, hogy a PHP függvény session_start () erőszakkal megjeleníti a legutóbbi módosítás fejlécében, de pont ez az, hogy ... a változás ideje a PHP-fájl, amely először kapott kontroll. Következésképpen, ha a helyszínen minden kérés megy a ugyanazt a forgatókönyvet (Front Controller), akkor a Last-Modified lesz szinte mindig egyenlő a változás ideje ezen egységes script, ami egyáltalán nem igaz.

Dinamikus "ablak" az ütemezett oldalon

Nos, végre megemlítjük az egyik olyan technikát, amely hasznos lehet a gyorsítótárazási fényben. Ha meg szeretné osztani a fő (vagy bármilyen más) oldalt az oldal, azonban zavarja egy kis blokk, ami kell, hogy legyen dinamikus, használja a modult munka SSI.

Az oldal azon részében dinamikusnak kell lennie, írja be ezt a "HTML Comment" -t:

A Nginx gyorsítótár szempontjából ez a megjegyzés a szokásos szöveg. A cache fájlban megjegyzést fognak menteni. Azonban, később, a gyorsítótár olvasásakor az SSI Nginx modul működik, ami a dinamikus URL-re fordul. Természetesen a cím / get_user_info / van egy PHP kezelőnek, amely a blokk tartalmát kijavítja.

És természetesen ne felejtsd el engedélyezni az SSI-t az oldalra, vagy akár az egész kiszolgálóra is:

Az SSI közé tartozik az irányelvnek egy másik, rendkívül fontos tulajdonságai. Ha az oldalon számos ilyen irányelv létezik, akkor mindegyikük egyidejűleg, párhuzamos üzemmódban kerül feldolgozásra. Tehát, ha van 4 blokk oldala, amelyek mindegyikét 200 ms-val töltik be, az oldal összegét a felhasználó 200 ms után fogadja el, és nem 800 után.