Kuidas vahemällu salvestada NGINX


NGINX on konsolideeritud avatud lähtekoodiga, suure jõudlusega veebiserver, mis kiirendab sisu ja rakenduste edastamist, suurendab turvalisust ja parandab mastaapsust. Nginxi üks levinumaid kasutusjuhtumeid on sisuvahemälu, mis on kõige tõhusam viis veebisaidi jõudluse suurendamiseks.

NGINX-i saate kasutada kohaliku päritoluserverite kiirendamiseks, konfigureerides selle ülesvoolu serverite vastuseid vahemällu ja ka serveriserverite loomiseks sisuteenuste võrkude (CDN) jaoks. NGINX toetab mõnd suurimat CDN-i.

Vahemäluna konfigureerimisel teeb NGINX järgmist.

  • staatilise ja dünaamilise sisu vahemälu.
  • parandage dünaamilise sisu jõudlust mikropeituse abil.
  • esitage aegunud sisu, kinnitades samal ajal parema toimivuse tagamiseks taustal.
  • alistab või määrab vahemälu juhtimise päised ja palju muud.

Sellest artiklist saate teada, kuidas seadistada NGINX Linuxi sisuvahemäluks, et teie veebiserverid töötaksid võimalikult tõhusalt.

Linuxi serverisse peaks olema installitud NGINX, kui mitte, järgige Nginxi installimiseks neid juhiseid:

  • Nginxi installimine CentOS 8-le
  • Kuidas Nginxit CentOS 7-le installida

Staatiline vahemälu Nginxis

Staatiline sisu on veebisaidi sisu, mis jääb lehtede lõikes samaks (ei muutu). Staatilise sisu näited hõlmavad selliseid faile nagu pildid, videod, dokumendid; CSS-failid ja JavaScripti failid.

Kui teie veebisait kasutab palju staatilist sisu, saate selle jõudlust optimeerida, lubades kliendipoolse vahemällu salvestamise, kus brauser salvestab staatilise sisu koopiad kiiremaks juurdepääsuks.

Järgmine näidiskonfiguratsioon on hea viis, lihtsalt asendage www.example.com oma veebisaidi nime URL-iga ja tehke vajaduse korral muud loo nimed.

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

Dünaamilise sisu vahemälu Nginxis

NGINX kasutab püsivat kettapõhist vahemälu, mis asub kusagil kohalikus failisüsteemis. Alustage vahemälus oleva sisu salvestamiseks kohaliku kettakataloogi loomisest.
# mkdir -p/var/vahemälu/nginx

Järgmisena määrake vahemälu kataloogis sobiv omandiline kuuluvus. See peaks kuuluma NGINX-i kasutajale (nginx) ja rühmale (nginx) järgmiselt.

# chown nginx:nginx /var/cache/nginx

Nüüd jätkake allpool jaotises, kuidas Nginxil dünaamilist sisu lubada.

FastCGI vahemälu lubamine NGINX-is

FastCGI (või FCGI) on laialt kasutatav protokoll interaktiivsete rakenduste, näiteks PHP, liidestamiseks veebiserveritega, näiteks NGINX. See on CGI (Common Gateway Interface) laiendus.

FCGI peamine eelis on see, et see haldab ühes protsessis mitut CGI-päringut. Ilma selleta peab veebiserver iga kliendi teenusetaotluse jaoks avama uue protsessi (mida tuleb kontrollida, töödelda päringut ja sulgeda).

PHP-skriptide töötlemiseks LEMP-pinu juurutuses kasutab NGINX FPM-i (FastCGI protsessihaldur) või PHP-FPM-i, mis on populaarne alternatiivne PHP FastCGI-juurutus. Kui PHP-FPM-protsess on käivitatud, on NGINX konfigureeritud sellele puhverserveri taotlusteks töötlemiseks. Seega saab NGINX-i konfigureerida ka vastuste vahemällu hoidmiseks PHP-FPM-i taustaprogrammi serverist.

Jaotises NGINX deklareeritakse FastCGI sisuvahemälu kasutades juhist fastcgi_cache_path ülemise taseme http {} kontekstis, NGINX-i konfiguratsioonistruktuuris. Samuti saate lisada fastcgi_cache_key , mis määrab vahemällu võtme (päringu identifikaatori).

Pealegi lisage ülesvoolu vahemälu oleku lugemiseks konteksti http {} lisamise käsk add_header X-Cache-Status - see on kasulik silumise eesmärgil.

Eeldades, et teie saidi serveriploki konfiguratsioonifail asub aadressil /etc/nginx/conf.d/testapp.conf või /etc/nginx/sites-available/testapp.conf (Ubuntu ja selle derivaatide all), avage redigeerimisfail ja lisage järgmised rida faili ülaosas.

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;

Direktiiv fastcgi_cache_path määrab parameetrite arvu, mis on:

  • /var/cache/nginx - tee vahemälu kohaliku kettakataloogi juurde.
  • tasemed - määratleb vahemälu hierarhiatasemed, see loob kaustasandilise kataloogihierarhia all/var/cache/nginx.
  • keys_zone (nimi: suurus) - võimaldab luua jagatud mälutsooni, kuhu salvestatakse kõik aktiivsed võtmed ja teave andmete (meta) kohta. Pange tähele, et võtmete mällu salvestamine kiirendab kontrollimisprotsessi, muutes NGINX-ile ketta olekut kontrollimata lihtsamaks otsustada, kas see on MISS või HIT.
  • passiivne - määrab aja, mille möödudes vahemälu andmed, millele määratud aja jooksul juurde ei pääse, kustutatakse vahemälust, hoolimata nende värskusest. Meie näidiskonfiguratsioonis on väärtus 60 m, mis tähendab, et failid, millele ei pääse pärast 60 aastat, eemaldatakse vahemälust.
  • max_size - määrab vahemälu maksimaalse suuruse. Siin on rohkem parameetreid, mida saate siin kasutada (lisateabe saamiseks lugege NGINXi dokumentatsiooni).

Allpool kirjeldatakse muutujaid direktiivis fastcgi_cache_key .

NGINX kasutab neid päringu võtme (identifikaatori) arvutamisel. Oluline on see, et vahemällu salvestatud vastuse saatmiseks kliendile peab päringul olema sama võti kui vahemälus olev vastus.

  • $skeem - taotluste skeem, HTTP või HTTPS.
  • $request_method - taotlusmeetod, tavaliselt „GET“ või „POST“.
  • $host - see võib olla prioriteetide järjekorras päringureal olev hostinimi või päringu väljale „Host” pärinev hostinimi või päringule vastav serveri nimi.
  • $request_uri - tähendab algse päringu täielikku URI-d (koos argumentidega).

Samuti arvutatakse add_headeri X-vahemälu-staatuse direktiivi muutuja $upstream_cache_status iga päringu jaoks, millele NGINX vastab, olenemata sellest, kas tegemist on MISS-iga (vastus puudub vahemälus, saadetud rakendusserverist) või HIT (vastus vahemälust) või mõni muu toetatud väärtus.

Järgmisena kasutab direktiivis asukoht , mis edastab PHP-päringud PHP-FPM-ile, ülalkirjeldatud vahemälu aktiveerimiseks direktiive fastcgi_cache .

Samuti määrake vahemälu aeg erinevate vastuste jaoks, kasutades fastcgi_cache_valid -direktiivi, nagu näidatud.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Kui on määratud ainult vahemälu salvestamise aeg, nagu meil, siis vahemällu jäävad ainult 200, 301 ja 302 vastust. Kuid võite ka vastused sõnaselgelt määratleda või kasutada mis tahes (mis tahes vastuskoodi jaoks):

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 vahemälu jõudluse peenhäälestus Nginxil

Miinimumarvude määramiseks, kui sama vastuseta taotlus tuleb enne vastuse vahemällu salvestamist lisada, lisage direktiiv fastcgi_cache_min_uses_code>, kas http {} või server {} või asukoht {} kontekst.

fastcgi_cache_min_uses  3

Aegunud vahemälu üksuste uuesti valideerimise lubamiseks tingimuslike päringute abil päiste väljadega „If-Modified-Since” ja „If-None-Match” lisage direktiiv http: fastcgi_cache_revalidate . {} või server {} või location {} kontekst.

fastcgi_cache_revalidate on;

Samuti saate NGINX-ile anda käsu vahemälusisu edastamiseks, kui päritoluserver või FCGI-server on maas, kasutades asukohadirektiivi proxy_cache_use_stale -direktiivi.

See näidiskonfiguratsioon tähendab, et kui NGINX saab eelvooluserverilt tõrke, ajalõpu ja mis tahes täpsustatud tõrke ning tal on vahemälus olevas sisus nõutava faili versioon, toimetab ta aegunud faili.

proxy_cache_use_stale error timeout http_500;

Teine kasulik direktiiv FCGI vahemälu jõudluse täpsustamiseks on fastcgi_cache_background_update , mis töötab koos direktiiviga proxy_cache_use_stale . Kui see on sisse lülitatud, annab see NGINX-ile korralduse aegunud sisu esitamiseks, kui kliendid soovivad faili, mille aegumistähtaeg on lõppenud või mida värskendatakse ülesvooluserveris.

fastcgi_cache_background_update on;

fastcgi_cache_lock on kasulik ka vahemälu jõudluse täpsustamiseks, kuna kui mitu klienti soovib sama sisu, mida vahemälus pole, edastab NGINX ülesvooluserverile ainult esimese taotluse, vastus teenivad seejärel vahemälu teisi klienditaotlusi.

fastcgi_cache_lock on;

Pärast kõigi ülaltoodud muudatuste tegemist NGINX-i konfiguratsioonifailis salvestage ja sulgege see. Seejärel kontrollige enne NGINX-teenuse taaskäivitamist konfiguratsioonistruktuuris süntaksi tõrkeid.

# nginx -t
# systemctl restart nginx

Järgmisena testige, kas vahemälu töötab korralikult, proovige oma veebirakendusele või saidile juurde pääseda, kasutades järgmist curl-käsku (esimene kord peaks näitama MISS-i, kuid järgnevad taotlused peaksid näitama HIT-i, nagu ekraanipildil näidatud).

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

Siin on veel üks ekraanipilt, mis näitab NGINXi vananenud andmeid.

Vahemälu ületamise erandite lisamine

Kasutades fastcgi_cache_bypass -direktiivi, on võimalik seada tingimused, mille korral NGINX ei peaks vahemällu salvestatud vastuseid klientidele saatma. Ja selleks, et NGINXil oleks ülesvoolu serveri vastuseid üldse vahemällu salvestatud, kasutage fastcgi_no_cache .

Näiteks kui soovite, et POST-päringud ja päringustringiga URL-id läheksid alati PHP-sse. Esmalt deklareerige if-lause tingimuse seadmiseks järgmiselt.

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

Seejärel aktiveerige ülaltoodud erand direktiivis location , mis edastab PHP-päringud PHP-FPM-ile, kasutades direktiive fastcgi_cache_bypass ja fastcgi_no_cache .

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Teie saidil on palju muid osi, mille puhul te ei soovi sisu vahemällu lubamist. Järgnev on NGINX-i konfiguratsiooni näide WordPressi saidi jõudluse parandamiseks, mis on toodud ajaveebis nginx.com.

Selle kasutamiseks tehke muudatused (näiteks domeen, teed, failinimed jne), et kajastada teie keskkonnas olemasolevat.

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

Puhverserveri vahemälu lubamine NGINX-is

NGINX toetab ka teiste puhverserverite vastuste vahemällu salvestamist (määratletud direktiiviga proxy_pass ). Selle testjuhtumi puhul kasutame NGINX-i Node.js-i veebirakenduse vastupidise puhverserverina, seega lubame NGINX-i Node.js-rakenduse vahemäluna. Kõigil siin kasutatavatel konfiguratsioonidirektiividel on sarnased tähendused kui eelmises osas toodud FastCGI direktiividel, nii et me ei seleta neid uuesti.

Puhverserverilt vastuste vahemällu salvestamise lubamiseks lisage proxy_cache_path -direktiiv ülataseme konteksti http {} . Päringute vahemällu salvestamise viisi lisamiseks võite lisada ka käsu proxy_cache_key järgmiselt.

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;

Seejärel aktiveerige vahemälu asukohadirektiivis.

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

Tingimuste määratlemiseks, mille korral NGINX ei saada vahemällu salvestatud sisu ega varja vastust ülesvooluserverilt, lisage proxy_cache_bypass ja proxy_no_cache .

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

Puhverserveri vahemälu jõudluse täpsustamine

Järgmised direktiivid on kasulikud puhverserveri jõudluse peenhäälestamiseks. Neil on ka sama tähendus nagu FastCGI direktiividel.

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;

Lisateavet ja vahemälu seadistamise juhiseid leiate kahe põhimooduli ngx_http_proxy_module dokumentatsioonist.

Lisaressursid: näpunäited WordPressi jõudluse parandamiseks.