Sisällön tallentaminen välimuistiin NGINX:ssä


NGINX on konsolidoitu avoimen lähdekoodin, korkean suorituskyvyn verkkopalvelin, joka nopeuttaa sisällön ja sovellusten toimitusta, parantaa turvallisuutta ja skaalautuvuutta. Yksi Nginxin yleisimmistä käyttötapauksista on sisällön välimuisti, joka on tehokkain tapa parantaa verkkosivuston suorituskykyä.

Lue myös: 10 suosituinta avoimen lähdekoodin välimuistityökalua Linuxille

Voit käyttää NGINX:ää nopeuttamaan paikallisia palvelimia määrittämällä sen välimuistiin ylävirran palvelimien vastaukset ja myös luomaan reunapalvelimia sisällönjakeluverkkoihin (CDN). NGINX käyttää joitakin suurimmista CDN:istä.

Kun NGINX on määritetty välimuistiksi, se:

  • staattisen ja dynaamisen sisällön välimuistiin.
  • parantaa dynaamisen sisällön suorituskykyä mikrovälimuistilla.
  • tarjota vanhentunutta sisältöä samalla kun se vahvistetaan uudelleen taustalla tehokkuuden parantamiseksi.
  • ohittaa tai asettaa Cache-Control-otsikot ja paljon muuta.

Tässä artikkelissa opit, kuinka NGINX määritetään sisällön välimuistiksi Linuxissa, jotta verkkopalvelimesi toimivat mahdollisimman tehokkaasti.

Edellytykset:

NGINX pitäisi olla asennettuna Linux-palvelimellesi. Jos et, noudata näitä ohjeita asentaaksesi Nginx:

  • Kuinka asentaa Nginx CentOS 8:aan
  • Kuinka asentaa Nginx CentOS 7:ään

Tallenna staattinen sisältö välimuistiin Nginxissä

Staattinen sisältö on verkkosivuston sisältöä, joka pysyy samana (ei muutu) eri sivuilla. Esimerkkejä staattisesta sisällöstä ovat tiedostot, kuten kuvat, videot, asiakirjat; CSS-tiedostot ja JavaScript-tiedostot.

Jos verkkosivustosi käyttää paljon staattista sisältöä, voit optimoida sen suorituskyvyn ottamalla käyttöön asiakaspuolen välimuistin, jossa selain tallentaa kopiot staattisesta sisällöstä nopeampaa käyttöä varten.

Seuraava esimerkkimääritys on hyvä vaihtoehto, korvaa vain www.example.com verkkosivustosi nimen URL-osoitteella ja tee tarvittavat muutokset muihin polkuihin.

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;
    }
}

Välimuistiin dynaaminen sisältö Nginxissä

NGINX käyttää pysyvää levypohjaista välimuistia, joka sijaitsee jossain paikallisessa tiedostojärjestelmässä. Joten aloita luomalla paikallinen levyhakemisto välimuistin sisällön tallentamista varten.
# mkdir -p /var/cache/nginx

Aseta seuraavaksi oikea omistajuus välimuistihakemistoon. Sen pitäisi olla NGINX-käyttäjän (nginx) ja ryhmän (nginx) omistuksessa seuraavasti.

chown nginx:nginx /var/cache/nginx

Jatka nyt nähdäksesi, kuinka dynaaminen sisältö otetaan käyttöön Nginxissä alla olevassa osiossa.

FastCGI-välimuistin käyttöönotto NGINX:ssä

FastCGI (tai FCGI) on laajalti käytetty protokolla interaktiivisten sovellusten, kuten PHP, liittämiseen verkkopalvelimiin, kuten NGINX. vahva>. Se on CGI (Common Gateway Interface) -laajennus.

FCGI:n tärkein etu on, että se hallitsee useita CGI-pyyntöjä yhdessä prosessissa. Ilman sitä verkkopalvelimen on avattava uusi prosessi (joka on ohjattava, käsiteltävä pyyntö ja suljettava) jokaista asiakkaan palvelupyyntöä varten.

Käsitelläkseen PHP-skriptejä LEMP-pinon käyttöönotossa NGINX käyttää FPM (FastCGI Process Manager) tai PHP-FPM, suosittu vaihtoehtoinen PHP FastCGI -toteutus. Kun PHP-FPM-prosessi on käynnissä, NGINX on määritetty lähettämään välityspalvelinpyyntöjä sille käsittelyä varten. Siten NGINX voidaan määrittää myös tallentamaan vastaukset välimuistiin PHP-FPM-taustasovelluspalvelimelta.

Kohdassa NGINX FastCGI-sisältövälimuisti ilmoitetaan käyttämällä komentoa nimeltä fastcgi_cache_path ylätason http{}-koodissa. kontekstissa NGINX-kokoonpanorakenteessa. Voit myös lisätä fastcgi_cache_key-koodin, joka määrittää avaimen (pyyntötunnisteen) välimuistiin tallentamista varten.

Lisäksi voit lukea ylävirran välimuistin tilan lisäämällä add_header X-Cache-Status -direktiivin http{}-kontekstiin – tämä on hyödyllistä virheenkorjaustarkoituksiin.

Olettaen, että sivustosi palvelinlohkon määritystiedosto sijaitsee osoitteessa /etc/nginx/conf.d/testapp.conf tai /etc/nginx/sites-available/testapp.conf ( kohdassa Ubuntu ja sen johdannaiset), avaa muokkaustiedosto ja lisää seuraavat rivit tiedoston yläosaan.

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;

fastcgi_cache_path-direktiivi määrittää parametrien määrän, jotka ovat:

  • /var/cache/nginx – polku välimuistin paikalliseen levyhakemistoon.
  • tasot – määrittää välimuistin hierarkiatasot. Se määrittää kaksitasoisen hakemistohierarkian hakemistoon /var/cache/nginx.
  • keys_zone (nimi:koko) – mahdollistaa jaetun muistivyöhykkeen luomisen, johon kaikki aktiiviset avaimet ja tiedot tiedoista (meta) tallennetaan. Huomaa, että avainten tallentaminen muistiin nopeuttaa tarkistusprosessia, koska NGINX:n on helpompi määrittää, onko se MISS vai HIT, tarkistamatta levyn tilaa.
  • ei-aktiivinen – määrittää ajan, jonka kuluttua välimuistissa olevat tiedot, joita ei ole käytetty määritettynä aikana, poistetaan välimuistista niiden tuoreudesta riippumatta. Arvo 60 m esimerkkimäärityksessämme tarkoittaa, että tiedostot, joita ei käytetä 60:n jälkeen, poistetaan välimuistista.
  • max_size – määrittää välimuistin enimmäiskoon. Täällä voit käyttää muitakin parametreja (lisätietoja on NGINX-dokumentaatiossa).

fastcgi_cache_key-direktiivin muuttujat kuvataan alla.

NGINX käyttää niitä pyynnön avaimen (tunnisteen) laskemiseen. Tärkeää on, että välimuistissa olevan vastauksen lähettäminen asiakkaalle edellyttää, että pyynnössä on sama avain kuin välimuistissa olevalla vastauksella.

  • $scheme – pyyntömalli, HTTP tai HTTPS.
  • $request_method – pyyntötapa, yleensä "GET" tai "POST".
  • $host – tämä voi olla isäntänimi pyyntöriviltä tai isäntänimi pyynnön otsikkokentästä Host tai pyyntöä vastaava palvelimen nimi tärkeysjärjestyksessä .
  • $request_uri – tarkoittaa täydellistä alkuperäistä pyynnön URI-osoitetta (argumentteineen).

Lisäksi $upstream_cache_status-muuttuja add_header X-Cache-Status -direktiivissä lasketaan jokaiselle pyynnölle, johon NGINX vastaa, riippumatta siitä, onko se MISS. > (vastausta ei löydy välimuistista, saatu sovelluspalvelimelta) tai HIT (vastaus toimitetaan välimuistista) tai jokin muu tuettu arvo.

Seuraavaksi location-direktiivissä, joka välittää PHP-pyynnöt PHP-FPM:lle, käytetään fastcgi_cache-komentoja aktivoimaan juuri määrittämäsi välimuisti.

Aseta myös välimuistiaika eri vastauksille käyttämällä fastcgi_cache_valid-direktiiviä kuvan mukaisesti.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Jos vain välimuistiin on määritetty aika kuten meidän tapauksessamme, vain 200, 301 ja 302 vastaukset tallennetaan välimuistiin. Mutta voit myös määrittää vastaukset nimenomaisesti tai käyttää mitä tahansa (mikä tahansa vastauskoodi):

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

FastCGI-välimuistin suorituskyvyn hienosäätö Nginxissä

Jos haluat määrittää, kuinka monta kertaa pyyntö samalla avaimella on tehtävä, ennen kuin vastaus välimuistiin tallennetaan, sisällytä fastcgi_cache_min_uses-käsky joko http{}- tai palvelin{} tai sijainti{}-konteksti.

fastcgi_cache_min_uses  3

Jos haluat ottaa käyttöön vanhentuneiden välimuistin kohteiden uudelleentarkistuksen ehdollisilla pyynnöillä, joissa on otsikkokentät If-Modified-Since ja If-None-Match, lisää fastcgi_cache_revalidate-direktiivi http{}- tai palvelin{}- tai location{}-kontekstissa.

fastcgi_cache_revalidate on;

Voit myös ohjeistaa NGINX:ää toimittamaan välimuistissa olevaa sisältöä, kun alkuperäpalvelin tai FCGI-palvelin ei toimi, käyttämällä sijaintidirektiivin proxy_cache_use_stale-direktiiviä.

Tämä esimerkkikokoonpano tarkoittaa, että kun NGINX vastaanottaa virheen, aikakatkaisun ja minkä tahansa määritetyistä virheistä ylävirran palvelimelta ja sillä on vanhentunut versio pyydetystä tiedostosta välimuistissa, se toimittaa vanhentuneen tiedoston.

proxy_cache_use_stale error timeout http_500;

Toinen hyödyllinen ohje FCGI-välimuistin suorituskyvyn hienosäätöön on fastcgi_cache_background_update, joka toimii yhdessä proxy_cache_use_stale-direktiivin kanssa. Kun se on päällä, se kehottaa NGINX:ää tarjoamaan vanhentunutta sisältöä, kun asiakkaat pyytävät tiedostoa, joka on vanhentunut tai jota ollaan päivittämässä ylävirran palvelimelta.

fastcgi_cache_background_update on;

fastcgi_cache_lock on hyödyllinen myös välimuistin suorituskyvyn hienosäädössä, sillä jos useat asiakkaat pyytävät samaa sisältöä, joka ei ole välimuistissa, NGINX välittää vain ensimmäisen pyynnön ylävirran palvelimelle, välimuistiin vastaus ja palvele sitten muiden asiakkaiden pyyntöjä välimuistista.

fastcgi_cache_lock on;

Kun olet tehnyt kaikki yllä olevat muutokset NGINX-määritystiedostoon, tallenna ja sulje se. Tarkista sitten konfiguraatiorakenteesta syntaksivirheiden varalta ennen NGINX-palvelun käynnistämistä uudelleen.

nginx -t
systemctl restart nginx

Testaa seuraavaksi, toimiiko välimuisti oikein, yritä päästä verkkosovellukseesi tai sivustoosi käyttämällä seuraavaa curl-komentoa (ensimmäisen kerran pitäisi osoittaa MISS, mutta myöhemmissä pyynnöissä OSUMA kuten kuvakaappauksessa näkyy).

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

Tässä on toinen kuvakaappaus, jossa näkyy, että NGINX palvelee vanhentuneita tietoja.

Poikkeusten lisääminen ohitusvälimuistiin

fastcgi_cache_bypass-direktiivin avulla on mahdollista asettaa ehtoja, joissa NGINX ei lähetä välimuistissa olevia vastauksia asiakkaille. Käytä fastcgi_no_cache-komentoa, jos haluat ohjeistaa NGINX:ää olemaan tallentamatta välimuistiin ylävirran palvelimen vastauksia.

Jos esimerkiksi haluat, että POST-pyynnöt ja URL-osoitteet, joissa on kyselymerkki, menevät aina PHP:hen. Ilmoita ensin if-lause asettaaksesi ehdon seuraavasti.

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

Aktivoi sitten yllä oleva poikkeus location-direktiivissä, joka välittää PHP-pyynnöt PHP-FPM:lle käyttämällä fastcgi_cache_bypass- ja fastcgi_no_cache -koodeja. direktiivejä.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

On monia muita sivustosi osia, joissa et ehkä halua ottaa sisällön välimuistiin käyttöön. Seuraavassa on esimerkki NGINX-määrityksestä WordPress-sivuston suorituskyvyn parantamiseksi, joka löytyy nginx.com -blogista.

Voit käyttää sitä tekemällä muutoksia (kuten verkkotunnusta, polkuja, tiedostonimiä jne.) ympäristössäsi olevan sisällön mukaan.

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; 
	} 
}

Välityspalvelimen välimuistin käyttöönotto NGINX:ssä

NGINX tukee myös muiden välityspalvelinten vastausten välimuistia (määritetty proxy_pass-direktiivillä). Tässä testitapauksessa käytämme NGINX:ää käänteisenä välityspalvelimena Node.js-verkkosovellukselle, joten otamme NGINX:n käyttöön Node.js-sovelluksen välimuistina. Kaikilla tässä käytetyillä konfigurointidirektiiveillä on samanlainen merkitys kuin edellisen osan FastCGI-direktiiveillä, joten emme selitä niitä uudelleen.

Ota välityspalvelimen vastausten välimuisti käyttöön sisällyttämällä komento proxy_cache_path ylimmän tason http{}-kontekstiin. Voit määrittää, kuinka pyynnöt tallennetaan välimuistiin, lisäämällä komennon proxy_cache_key seuraavasti.

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;

Aktivoi seuraavaksi välimuisti sijaintidirektiivissä.

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

Voit määrittää ehdot, joissa NGINX ei lähetä välimuistissa olevaa sisältöä eikä välimuistiin ollenkaan vastausta ylävirran palvelimelta, sisällyttämällä proxy_cache_bypass ja proxy_no_cache.

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

Välityspalvelimen välimuistin suorituskyvyn hienosäätö

Seuraavat ohjeet ovat hyödyllisiä välityspalvelimen välimuistin suorituskyvyn hienosäädössä. Niillä on myös samat merkitykset kuin FastCGI-direktiiveillä.

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;

Lisätietoja ja välimuistin määrityskäskyjä on kahden päämoduulin ngx_http_fastcgi_module ja ngx_http_proxy_module ohjeissa.

Lisäresurssit: NGINX-sisällön välimuisti ja vinkkejä WordPressin suorituskyvyn parantamiseen.