Weboldal keresés

Tartalom gyorsítótárazása az NGINX-ben


Az NGINX egy konszolidált nyílt forráskódú, nagy teljesítményű webszerver, amely felgyorsítja a tartalom és az alkalmazások kézbesítését, növeli a biztonságot és a méretezhetőséget. Az Nginx egyik leggyakoribb használati esete a Tartalom-gyorsítótárazás, amely a webhely teljesítményének növelésének leghatékonyabb módja.

Olvassa el még: 10 legjobb nyílt forráskódú gyorsítótárazó eszköz Linuxhoz

Az NGINX segítségével felgyorsíthatja a helyi eredetű kiszolgálókat azáltal, hogy úgy konfigurálja, hogy gyorsítótárazza a felfelé irányuló szerverek válaszait, valamint szélszervereket hozzon létre a tartalomszolgáltató hálózatokhoz (CDN-ek). Az NGINX biztosítja a legnagyobb CDN-ek némelyikét.

Ha gyorsítótárként van beállítva, az NGINX:

  • gyorsítótár statikus és dinamikus tartalom.
  • a dinamikus tartalomteljesítmény javítása mikro-gyorsítótárral.
  • elavult tartalmat szolgáltasson, miközben a háttérben újraellenőrzi a jobb teljesítmény érdekében.
  • felülbírálhatja vagy beállíthatja a Cache-Control fejléceket és így tovább.

Ebből a cikkből megtudhatja, hogyan konfigurálhatja az NGINX-et Tartalom-gyorsítótárazásként Linuxon, hogy webszerverei a lehető leghatékonyabban működjenek.

Előfeltételek:

Az NGINX-nek telepítve kell lennie a Linux-kiszolgálón, ha nem, kövesse az alábbi útmutatókat az Nginx telepítéséhez:

  • Az Nginx telepítése a CentOS 8 rendszeren
  • Az Nginx telepítése a CentOS 7 rendszeren

Statikus tartalom gyorsítótárazása az Nginx rendszeren

A statikus tartalom egy webhely tartalma, amely változatlan marad (nem változik) az oldalak között. Statikus tartalom például olyan fájlok, mint a képek, videók, dokumentumok; CSS-fájlok és JavaScript-fájlok.

Ha webhelye sok statikus tartalmat használ, akkor optimalizálhatja teljesítményét az ügyféloldali gyorsítótár engedélyezésével, ahol a böngésző a statikus tartalom másolatait tárolja a gyorsabb hozzáférés érdekében.

A következő példakonfiguráció jó megoldás, csak cserélje ki a www.example.com címet webhelye nevének URL-jére, és szükség szerint módosítsa a többi elérési utat.

server {
    # substitute your web server's URL for www.example.com
    server_name www.example.com;
    root /var/www/example.com/htdocs;
    index index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        try_files $uri =404;
        include fastcgi_params;
        # substitute the socket, or address and port, of your WordPress server
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        #fastcgi_pass 127.0.0.1:9000;
 	}   

    location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg
                  |jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid
                  |midi|wav|bmp|rtf)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
}

Dinamikus tartalom gyorsítótárazása az Nginxen

Az NGINX egy állandó lemezalapú gyorsítótárat használ, amely valahol a helyi fájlrendszerben található. Kezdje tehát a helyi lemezkönyvtár létrehozásával a gyorsítótárazott tartalom tárolására.
# mkdir -p /var/cache/nginx

Ezután állítsa be a megfelelő tulajdonjogot a gyorsítótár-könyvtárban. A tulajdonosnak az NGINX felhasználónak (nginx) és a csoportnak (nginx) kell lennie, az alábbiak szerint.

chown nginx:nginx /var/cache/nginx

Most folytassa tovább, hogy megtudja, hogyan engedélyezheti a dinamikus tartalmat az Nginx-en az alábbi részben.

A FastCGI gyorsítótár engedélyezése az NGINX-ben

A FastCGI (vagy FCGI) egy széles körben használt protokoll az interaktív alkalmazások, például a PHP és a webszerverek, például az NGINX összekapcsolására.. Ez a CGI (Common Gateway Interface) kiterjesztése.

Az FCGI fő előnye, hogy több CGI-kérést kezel egyetlen folyamatban. Enélkül a webszervernek új folyamatot kell nyitnia (amelyet vezérelni kell, fel kell dolgozni egy kérést és be kell zárni) minden ügyfél szolgáltatás iránti kérésére.

A PHP szkriptek LEMP-veremben történő feldolgozásához az NGINX az FPM (FastCGI Process Manager) vagy az PHP-FPM, egy népszerű alternatív PHP FastCGI implementáció. Miután a PHP-FPM folyamat fut, az NGINX úgy van konfigurálva, hogy proxy kéréseket küldjön hozzá feldolgozás céljából. Így az NGINX úgy is konfigurálható, hogy gyorsítótárazza a válaszokat a PHP-FPM háttéralkalmazásszerverről.

Az NGINX alatt a FastCGI tartalom-gyorsítótár a fastcgi_cache_path nevű direktívával deklarálva van a legfelső szintű http{}-ban. kontextusban, az NGINX konfigurációs struktúráján belül. Hozzáadhatja a fastcgi_cache_key kódot is, amely kulcsot (kérelemazonosítót) határoz meg a gyorsítótárazáshoz.

Emellett az upstream gyorsítótár állapotának olvasásához adja hozzá az add_header X-Cache-Status direktívát a http{} kontextusba – ez hasznos hibakeresési célokra.

Feltéve, hogy webhelye szerverblokk konfigurációs fájlja a /etc/nginx/conf.d/testapp.conf vagy az /etc/nginx/sites-available/testapp.conf címen található ( az Ubuntu és származékai alatt), nyissa meg a szerkesztőfájlt, és adja hozzá a következő sorokat a fájl tetejéhez.

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHEZONE:10m; inactive=60m max_size=40m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;

A fastcgi_cache_path direktíva a következő paraméterek számát határozza meg:

  • /var/cache/nginx – a gyorsítótár helyi lemezkönyvtárának elérési útja.
  • levelek – meghatározza a gyorsítótár hierarchiaszintjeit, kétszintű könyvtárhierarchiát állít be a /var/cache/nginx alatt.
  • keys_zone (név:méret) – lehetővé teszi egy megosztott memóriazóna létrehozását, ahol az összes aktív kulcs és az adatokkal kapcsolatos információ (meta) tárolva van. Vegye figyelembe, hogy a kulcsok memóriában való tárolása felgyorsítja az ellenőrzési folyamatot, mivel megkönnyíti az NGINX számára annak meghatározását, hogy MISS vagy HIT-e, anélkül, hogy ellenőrizné a lemezen lévő állapotot.
  • inaktív – megadja, hogy mennyi idő után törlődnek a gyorsítótárból azok a gyorsítótárazott adatok, amelyekhez a megadott időn belül nem fértek hozzá, függetlenül azok frissességétől. Példakonfigurációnkban a 60 m érték azt jelenti, hogy a 60 után nem elért fájlok törlődnek a gyorsítótárból.
  • max_size – a gyorsítótár maximális méretét adja meg. Több paraméter is használható itt (további információért olvassa el az NGINX dokumentációját).

A fastcgi_cache_key direktíva változóit az alábbiakban ismertetjük.

Az NGINX ezeket használja a kérés kulcsának (azonosítójának) kiszámításához. Fontos, hogy gyorsítótárazott válasz küldéséhez a kérésnek ugyanazzal a kulccsal kell rendelkeznie, mint a gyorsítótárazott válasznak.

  • $scheme – kérési séma, HTTP vagy HTTPS.
  • $request_method – kérési mód, általában „GET ” vagy „POST ”.
  • $host – ez lehet gazdagépnév a kéréssorban, vagy gazdagépnév a „Host” kérelem fejlécmezőjéből, vagy a kérésnek megfelelő kiszolgálónév prioritási sorrendben .
  • $request_uri – a teljes eredeti kérelem URI-t jelenti (argumentumokkal).

Ezenkívül a $upstream_cache_status változót az add_header X-Cache-Status direktívában a rendszer minden olyan kéréshez kiszámítja, amelyre az NGINX válaszol, függetlenül attól, hogy az MISS. > (a válasz nem található a gyorsítótárban, alkalmazásszerverről érkezett) vagy HIT (a gyorsítótárból kiszolgált válasz) vagy bármely más támogatott érték.

Ezután a location direktíván belül, amely a PHP kéréseket továbbítja a PHP-FPM-nek, a fastcgi_cache direktívákat használja a fent definiált gyorsítótár aktiválásához.

A különböző válaszok gyorsítótárazási idejét is beállíthatja a fastcgi_cache_valid direktíva segítségével, az ábrán látható módon.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Ha csak a gyorsítótárazási idő van megadva, mint esetünkben, akkor csak a 200, 301 és 302 válaszok kerülnek gyorsítótárba. De a válaszokat kifejezetten megadhatja, vagy bármelyiket használhatja (bármilyen válaszkódhoz):

fastcgi_cache CACHEZONE;
fastcgi_cache_valid 200  301 203 60m;
fastcgi_cache_valid 404 10m;
OR
fastcgi_cache CACHEZONE;
fastcgi_cache_valid  any 10m;

A FastCGI gyorsítótárazási teljesítmény finomhangolása az Nginx rendszeren

Annak beállításához, hogy a válasz gyorsítótárazása előtt hányszor kell egy kérést ugyanazzal a kulccsal elküldeni, adja meg a fastcgi_cache_min_uses direktívát a http{} vagy a kódban. >szerver{} vagy hely{} kontextusban.

fastcgi_cache_min_uses  3

Ha engedélyezni szeretné a lejárt gyorsítótárelemek feltételes kérelmekkel történő újraellenőrzését az „If-Modified-Since” és az „If-None-Match ” fejlécmezőkkel, adja hozzá a fastcgi_cache_revalidate direktíva a http{} vagy szerver{} vagy location{} kontextusban.

fastcgi_cache_revalidate on;

Arra is utasíthatja az NGINX-et, hogy a hely direktíván belül a proxy_cache_use_stale direktíva segítségével kézbesítsen gyorsítótárazott tartalmat, amikor az eredeti szerver vagy az FCGI-szerver nem működik.

Ez a mintakonfiguráció azt jelenti, hogy amikor az NGINX hibát, időtúllépést és a megadott hibák bármelyikét kapja a felfelé irányuló kiszolgálótól, és a kért fájl elavult verziója van a gyorsítótárazott tartalomban, akkor az elavult fájlt kézbesíti.

proxy_cache_use_stale error timeout http_500;

Egy másik hasznos direktíva az FCGI gyorsítótárazási teljesítményének finomhangolásához a fastcgi_cache_background_update, amely a proxy_cache_use_stale direktívával együtt működik. Ha be van kapcsolva, akkor utasítja az NGINX-et az elavult tartalom kiszolgálására, amikor az ügyfelek olyan fájlt kérnek, amely lejárt, vagy éppen frissítés alatt áll a felfelé irányuló kiszolgálóról.

fastcgi_cache_background_update on;

A fastcgi_cache_lock a gyorsítótár teljesítményének finomhangolásához is hasznos, mivel ha több kliens kéri ugyanazt a tartalmat, amely nincs a gyorsítótárban, az NGINX csak az első kérést továbbítja a felfelé irányuló kiszolgálónak, gyorsítótárazva a választ, majd kiszolgálja a többi ügyfél kérését a gyorsítótárból.

fastcgi_cache_lock on;

Miután elvégezte a fenti módosításokat az NGINX konfigurációs fájlban, mentse és zárja be. Ezután az NGINX szolgáltatás újraindítása előtt ellenőrizze a konfigurációs struktúrát, hogy nincsenek-e szintaktikai hibák.

nginx -t
systemctl restart nginx

Ezután tesztelje, hogy a gyorsítótár megfelelően működik-e, és próbálja meg elérni a webalkalmazást vagy webhelyet a következő curl paranccsal (az első alkalommal MISS-et kell jeleznie, de a további kéréseknek HIT-et kell jelezniük a képernyőképen látható módon).

curl -I http://testapp.linux-console.net

Íme egy másik képernyőkép, amelyen az NGINX elavult adatok kiszolgálása látható.

Kivételek hozzáadása a gyorsítótár megkerüléséhez

A fastcgi_cache_bypass direktíva segítségével beállítható olyan feltételek, amelyek mellett az NGINX ne küldjön gyorsítótárazott válaszokat az ügyfeleknek. Ha pedig arra szeretné utasítani az NGINX-et, hogy egyáltalán ne tárolja a válaszokat a felfelé irányuló kiszolgálóról, használja a fastcgi_no_cache parancsot.

Például, ha azt szeretné, hogy a POST kérések és a lekérdezési karakterláncot tartalmazó URL-ek mindig a PHP-hez menjenek. Először deklaráljon egy if utasítást a feltétel beállításához az alábbiak szerint.

set $skip_cache 0; 
if ($request_method = POST) { 
	set $skip_cache 1; 
} 

Ezután aktiválja a fenti kivételt a location direktívában, amely a PHP kéréseket továbbítja a PHP-FPM-nek a fastcgi_cache_bypass és a fastcgi_no_cache használatával. > direktívák.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Webhelyének sok más része is előfordulhat, hogy nem szeretné engedélyezni a tartalom gyorsítótárazását. A következő példa egy NGINX-konfigurációt mutat be a WordPress-webhelyek teljesítményének javítására, amely az nginx.com blogon található.

Használatához hajtson végre módosításokat (például a tartományt, az elérési utakat, a fájlneveket stb.), hogy tükrözze a környezetében található elemeket.

fastcgi_cache_path /var/run/NGINX-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m; 
fastcgi_cache_key "$scheme$request_method$host$request_uri"; 
server { 
	server_name example.com www.example.com; 
	root /var/www/example.com; 
	index index.php; 
	access_log /var/log/NGINX/example.com.access.log; 
	error_log /var/log/NGINX/example.com.error.log; 
	set $skip_cache 0; 
	# POST requests and URLs with a query string should always go to PHP 	
	if ($request_method = POST) { 
		set $skip_cache 1; 
	} 
	if ($query_string != "") {
		set $skip_cache 1; 
	} 
	# Don't cache URIs containing the following segments 
	if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php |sitemap(_index)?.xml") { 
		set $skip_cache 1; 
	} 
	# Don't use the cache for logged-in users or recent commenters 
	if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass |wordpress_no_cache|wordpress_logged_in") {
		set $skip_cache 1; 
	} 
	location / { 
		try_files $uri $uri/ /index.php?$args; 
	} 
	location ~ .php$ { 
		try_files $uri /index.php; 
		include fastcgi_params; 
		fastcgi_pass unix:/var/run/php5-fpm.sock; 
		fastcgi_cache_bypass $skip_cache; 
		fastcgi_no_cache $skip_cache; 
		fastcgi_cache WORDPRESS; 
		fastcgi_cache_valid 60m; 
	} 
	location ~ /purge(/.*) {
		fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; 
	} 
	location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg |gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi |wav|bmp|rtf)$ { 
		access_log off; 
		log_not_found off; 
		expires max; 
	} 
	location = /robots.txt { 
		access_log off; 
		log_not_found off; 
	}
	location ~ /. { 
		deny all; 
		access_log off; 
		log_not_found off; 
	} 
}

Proxy-gyorsítótár engedélyezése az NGINX-ben

Az NGINX támogatja a többi proxyszervertől érkező válaszok gyorsítótárazását is (a proxy_pass direktíva határozza meg). Ebben a tesztesetben az NGINX-et fordított proxyként használjuk egy Node.js webalkalmazáshoz, így engedélyezni fogjuk az NGINX-et gyorsítótárként a Node.js alkalmazás számára. Az itt használt összes konfigurációs direktíva hasonló jelentéssel bír, mint az előző szakaszban szereplő FastCGI direktívák, ezért nem magyarázzuk el újra.

A proxyszervertől érkező válaszok gyorsítótárazásának engedélyezéséhez vegye fel a proxy_cache_path direktívát a legfelső szintű http{} kontextusba. A kérések gyorsítótárazásának meghatározásához hozzáadhatja a proxy_cache_key direktívát is az alábbiak szerint.

proxy_cache_path /var/cache/nginx app1 keys_zone=PROXYCACHE:100m inactive=60m max_size=500m;
proxy_cache_key  "$scheme$request_method$host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_min_uses 3;

Ezután aktiválja a gyorsítótárat a hely direktívában.

location / {
	proxy_pass http://127.0.0.1:3000;
	proxy_cache        PROXYCACHE;
	proxy_cache_valid 200 302 10m;
	proxy_cache_valid 404      1m;
}

Annak meghatározásához, hogy az NGINX ne küldjön gyorsítótárban tárolt tartalmat, és egyáltalán nem gyorsítótárazzon választ az upstream szervertől, adja meg a proxy_cache_bypass és a proxy_no_cache paramétereket.

 
proxy_cache_bypass  $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache        $http_pragma $http_authorization;

A proxy gyorsítótár teljesítményének finomhangolása

A következő utasítások hasznosak a proxy gyorsítótár teljesítményének finomhangolásához. Ugyanolyan jelentéssel bírnak, mint a FastCGI direktívák.

proxy_cache_min_uses 3;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating http_500;
proxy_cache_background_update on;
proxy_cache_lock on;

További információkért és a gyorsítótárazási konfigurációs direktívákért tekintse meg a két fő modul (ngx_http_fastcgi_module és ngx_http_proxy_module) dokumentációját.

További források: NGINX tartalom gyorsítótár és tippek a WordPress teljesítményének javításához.