Hvernig á að vista efni í NGINX


NGINX er samþættur opinn, afkastamikill vefþjónn sem flýtir fyrir afhendingu efnis og forrita, eykur öryggi og bætir sveigjanleika. Eitt algengasta notkunartilvik Nginx er Content Caching, sem er áhrifaríkasta leiðin til að auka frammistöðu vefsíðu.

Þú getur notað NGINX til að flýta fyrir staðbundnum upprunaþjónum með því að stilla það til að vista svör frá andstreymisþjónum og einnig til að búa til brúnþjóna fyrir efnisafhendingarnet (CDN). NGINX knýr nokkur af stærstu CDN-skjölunum.

Þegar það er stillt sem skyndiminni mun NGINX:

  • skyndiminni kyrrstætt og kraftmikið efni.
  • bættu kraftmikla afköst efnis með örskyndiminni.
  • birtið gamaldags efni á meðan það er endurgilt í bakgrunni fyrir betri árangur.
  • hneka eða stilla Cache-Control hausa og fleira.

Í þessari grein muntu læra hvernig á að stilla NGINX sem innihaldsskyndiminni í Linux til að láta vefþjónana þína keyra eins skilvirkt og mögulegt er.

Þú ættir að hafa NGINX uppsett á Linux netþjóninum þínum, ef ekki fylgdu þessum leiðbeiningum til að setja upp Nginx:

  • Hvernig á að setja upp Nginx á CentOS 8
  • Hvernig á að setja upp Nginx á CentOS 7

Skyndiminni statískt efni á Nginx

Stöðugt efni er efni á vefsíðu sem helst það sama (breytist ekki) á öllum síðum. Dæmi um kyrrstætt efni eru skrár eins og myndir, myndbönd, skjöl; CSS skrár og JavaScript skrár.

Ef vefsíðan þín notar mikið kyrrstætt efni, þá geturðu fínstillt afköst þess með því að virkja skyndiminni viðskiptavinarhliðar þar sem vafrinn geymir afrit af kyrrstöðu efni fyrir hraðari aðgang.

Eftirfarandi sýnishorn af uppsetningu er gott, skiptu bara út www.example.com fyrir vefslóðina á vefsíðuheiti þínu og gerðu breytingar á öðrum slóðanöfnum eftir því sem við á.

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

Skyndiminni Dynamic Content á Nginx

NGINX notar viðvarandi skyndiminni á diski sem er staðsett einhvers staðar í staðbundnu skráarkerfinu. Svo byrjaðu á því að búa til staðbundna diskaskrána til að geyma efni í skyndiminni.
# mkdir -p /var/cache/nginx

Næst skaltu stilla viðeigandi eignarhald á skyndiminni skránni. Það ætti að vera í eigu NGINX notandans (nginx) og hópsins (nginx) sem hér segir.

# chown nginx:nginx /var/cache/nginx

Haltu nú áfram til að sjá hvernig á að virkja kraftmikið efni á Nginx í kaflanum hér að neðan.

Virkjar FastCGI Cache í NGINX

FastCGI (eða FCGI) er mikið notað samskiptareglur til að tengja gagnvirk forrit eins og PHP við vefþjóna eins og NGINX. Það er framlenging á CGI (Common Gateway Interface).

Helsti kosturinn við FCGI er að það stjórnar mörgum CGI beiðnum í einu ferli. Án þess þarf vefþjónninn að opna nýtt ferli (sem þarf að stjórna, vinna úr beiðni og loka) fyrir hverja beiðni viðskiptavinar um þjónustu.

Til að vinna með PHP forskriftir í LEMP stafla dreifingu, notar NGINX FPM (FastCGI Process Manager) eða PHP-FPM, vinsælt val PHP FastCGI útfærslu. Þegar PHP-FPM ferlið er í gangi er NGINX stillt á umboðsbeiðnir til þess til vinnslu. Þannig er einnig hægt að stilla NGINX til að vista svör frá PHP-FPM bakenda forritaþjóninum.

Undir NGINX er FastCGI innihalds skyndiminni lýst yfir með því að nota tilskipun sem kallast fastcgi_cache_path í efsta stiginu http{} samhengi, innan NGINX stillingarskipulagsins. Þú getur líka bætt við fastcgi_cache_key sem skilgreinir lykil (beiðnarauðkenni) fyrir skyndiminni.

Að auki, til að lesa andstreymis skyndiminni stöðu, bættu add_header X-Cache-Status tilskipuninni við innan http{} samhengisins – þetta er gagnlegt í villuleit.

Að því gefnu að stillingarskrá síðunnar þinnar fyrir netþjónsblokk sé staðsett á /etc/nginx/conf.d/testapp.conf eða /etc/nginx/sites-available/testapp.conf (undir Ubuntu og afleiður þess), opnaðu klippiskrána og bættu við eftirfarandi línur efst í skránni.

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 tilskipunin tilgreinir fjölda færibreyta sem eru:

  • /var/cache/nginx – slóðin að staðbundnu diskaskránni fyrir skyndiminni.
  • stig – skilgreinir stigveldisstig skyndiminni, það setur upp tveggja stiga skráarstigveldi undir /var/cache/nginx.
  • keys_zone (nafn:stærð) – gerir kleift að búa til sameiginlegt minnissvæði þar sem allir virkir lyklar og upplýsingar um gögn (meta) eru geymdar. Athugaðu að geymsla lyklanna í minni flýtir fyrir athugunarferlinu, með því að auðvelda NGINX að ákvarða hvort það sé MISS eða HIT, án þess að athuga stöðuna á disknum.
  • óvirkt – tilgreinir þann tíma eftir að skyndiminni gögnum sem ekki er opnuð á tilgreindum tíma verður eytt úr skyndiminni óháð ferskleika þeirra. Gildi sem er 60m í dæminu okkar þýðir að skrár sem ekki er náð í eftir 60 verða fjarlægðar úr skyndiminni.
  • max_size – tilgreinir hámarksstærð skyndiminni. Það eru fleiri færibreytur sem þú getur notað hér (lestu NGINX skjölin fyrir frekari upplýsingar).

Breytum í fastcgi_cache_key tilskipuninni er lýst hér að neðan.

NGINX notar þá til að reikna út lykil (auðkenni) beiðni. Mikilvægt er að til að senda svar í skyndiminni til viðskiptavinarins verður beiðnin að hafa sama lykil og svar í skyndiminni.

  • $skema – biðja um kerfi, HTTP eða HTTPS.
  • $request_method – beiðniaðferð, venjulega „GET“ eða „POST“.
  • $host – þetta getur verið hýsingarheiti úr beiðnilínunni, eða hýsingarheiti úr „Host“ beiðnihausareitnum, eða netþjónsnafnið sem passar við beiðni, í forgangsröð.
  • $request_uri – þýðir upprunalega URI beiðninnar (með rökum).

Einnig er $upstream_cache_status breytan í add_header X-Cache-Status tilskipuninni reiknuð út fyrir hverja beiðni sem NGINX svarar, hvort sem það er MISS (svar fannst ekki í skyndiminni, fékk frá forritaþjóni) eða HIT (svar borið fram úr skyndiminni) eða einhverju af öðrum studdum gildum.

Næst, innan staðsetningar tilskipunarinnar sem sendir PHP beiðnir til PHP-FPM, notar fastcgi_cache tilskipanirnar til að virkja skyndiminni sem þú varst að skilgreina hér að ofan.

Stilltu einnig skyndiminnistíma fyrir mismunandi svör með fastcgi_cache_valid tilskipuninni eins og sýnt er.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Ef aðeins skyndiminnistími er tilgreindur eins og í okkar tilviki eru aðeins 200, 301 og 302 svör geymd í skyndiminni. En þú getur líka tilgreint svörin beinlínis eða notað hvaða (fyrir hvaða svarkóða sem er):

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

Fínstilla FastCGI skyndiminni árangur á Nginx

Til að stilla lágmarksfjölda skipta sem beiðni með sama lykli þarf að gera áður en svarið er sett í skyndiminni skaltu láta fastcgi_cache_min_uses tilskipunina fylgja með, annað hvort í http{} eða >þjónn{} eða staðsetning{} samhengi.

fastcgi_cache_min_uses  3

Til að virkja endurstaðfestingu á útrunnum skyndiminnisatriðum með því að nota skilyrtar beiðnir með hausreitunum \If-Modified-Since og \If-None-Match“ skaltu bæta fastcgi_cache_revalidate tilskipuninni við, innan >http{} eða þjónn{} eða staðsetning{} samhengi.

fastcgi_cache_revalidate on;

Þú getur líka fyrirskipað NGINX að afhenda efni í skyndiminni þegar upprunaþjónninn eða FCGI þjónninn er niðri, með því að nota proxy_cache_use_stale tilskipunina innan staðsetningartilskipunarinnar.

Þessi sýnishornsstilling þýðir að þegar NGINX fær villu, tímamörk og einhverja af tilgreindum villum frá andstreymisþjóninum og er með gamaldags útgáfu af umbeðinni skrá í skyndiminni, þá skilar það gömlu skránni.

proxy_cache_use_stale error timeout http_500;

Önnur gagnleg tilskipun til að fínstilla afköst FCGI skyndiminni er fastcgi_cache_background_update sem virkar í tengslum við proxy_cache_use_stale tilskipunina. Þegar kveikt er á því, gefur það NGINX fyrirmæli um að þjóna gamaldags efni þegar viðskiptavinir biðja um skrá sem er útrunnin eða er í uppfærslu frá andstreymisþjóninum.

fastcgi_cache_background_update on;

fastcgi_cache_lock er líka gagnlegt til að fínstilla skyndiminnisafköst þar sem ef margir biðlarar biðja um sama efni sem er ekki í skyndiminni, mun NGINX aðeins senda fyrstu beiðnina til andstreymisþjónsins, skyndiminni svar þjóna síðan beiðnum annarra viðskiptavina úr skyndiminni.

fastcgi_cache_lock on;

Eftir að hafa gert allar ofangreindar breytingar í NGINX stillingarskránni skaltu vista og loka henni. Athugaðu síðan stillingaruppbygginguna fyrir allar setningafræðivillur áður en þú endurræsir NGINX þjónustuna.

# nginx -t
# systemctl restart nginx

Næst skaltu prófa hvort skyndiminni virkar rétt, reyndu að fá aðgang að vefforritinu þínu eða síðu með því að nota eftirfarandi krulla skipun (fyrsta skiptið ætti að gefa til kynna MISS, en síðari beiðnir ættu að gefa til kynna HIT eins og sýnt er á skjámyndinni).

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

Hér er önnur skjámynd sem sýnir NGINX sem þjónar gömlum gögnum.

Bætir undantekningum við framhjá skyndiminni

Það er hægt að setja skilyrði þar sem NGINX ætti ekki að senda skyndiminni svör til viðskiptavina, með því að nota fastcgi_cache_bypass tilskipunina. Og til að gefa NGINX fyrirmæli um að vista alls ekki svör frá andstreymisþjóninum, notaðu fastcgi_no_cache.

Til dæmis, ef þú vilt að POST beiðnir og vefslóðir með fyrirspurnarstreng fari alltaf í PHP. Fyrst skaltu lýsa yfir ef yfirlýsingu til að setja skilyrðið sem hér segir.

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

Virkjaðu síðan undantekninguna hér að ofan í staðsetningar tilskipuninni sem sendir PHP beiðnir til PHP-FPM, með því að nota fastcgi_cache_bypass og fastcgi_no_cache tilskipanirnar.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Það eru margir aðrir hlutar á síðunni þinni sem þú vilt kannski ekki virkja skyndiminni fyrir. Eftirfarandi er dæmi um NGINX stillingar til að bæta afköst WordPress síðu, veitt á nginx.com blogginu.

Til að nota það skaltu gera breytingar (eins og lén, slóðir, skráarnöfn osfrv.) til að endurspegla það sem er til í umhverfi þínu.

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

Virkjar proxy skyndiminni í NGINX

NGINX styður einnig skyndiminni svars frá öðrum proxy-þjónum (skilgreint með proxy_pass tilskipuninni). Í þessu prófunartilviki erum við að nota NGINX sem öfugt umboð fyrir Node.js vefforrit, þannig að við munum virkja NGINX sem skyndiminni fyrir Node.js forritið. Allar stillingartilskipanir sem notaðar eru hér hafa svipaða merkingu og FastCGI tilskipanirnar í fyrri hlutanum, svo við munum ekki útskýra þær aftur.

Til að virkja skyndiminni svars frá proxy-þjóni skaltu láta proxy_cache_path tilskipunina fylgja með http{} á efsta stigi. Til að tilgreina hvernig beiðnir eru vistaðar í skyndiminni geturðu einnig bætt við proxy_cache_key tilskipuninni sem hér segir.

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;

Næst skaltu virkja skyndiminni í staðsetningartilskipuninni.

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

Til að skilgreina aðstæður þar sem NGINX sendir ekki skyndiminni efni og vistar alls ekki svar frá andstreymisþjóninum skaltu láta proxy_cache_bypass og proxy_no_cache fylgja með.

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

Fínstilla frammistöðu proxy skyndiminni

Eftirfarandi leiðbeiningar eru gagnlegar til að fínstilla frammistöðu proxy skyndiminni. Þeir hafa einnig sömu merkingu og FastCGI tilskipanir.

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;

Fyrir frekari upplýsingar og skyndiminni stillingarleiðbeiningar, sjá skjölin fyrir tvær aðaleiningarnar ngx_http_proxy_module.

Viðbótarupplýsingar: Ráð til að bæta árangur WordPress.