Yadda ake Adana Abun cikin NGINX


NGINX kasancewa tushen budewa, ingantaccen sabar yanar gizo wacce take hanzarta abun ciki da isar da aikace-aikace, inganta tsaro, da inganta sikeli. Aya daga cikin sharuɗɗan amfani da Nginx shine Caching Content, wanda shine hanya mafi inganci don haɓaka aikin gidan yanar gizo.

Kuna iya amfani da NGINX don hanzarta sabobin asalin gida ta hanyar saita shi zuwa amsoshi na ɓoye daga sabobin da ke sama da kuma ƙirƙirar sabobin baki don hanyoyin sadarwar abun ciki (CDNs). NGINX yana iko da wasu manyan CDNs.

Lokacin da aka saita shi azaman ma'aji, NGINX zai:

  • cache tsaye da tsayayyen abun ciki.
  • inganta ingantaccen aikin abun ciki tare da cising micro.
  • yi aiki da tsayayyen abun ciki yayin sake sabuntawa a bayan fage don ingantaccen aiki.
  • override ko saita buga kwallun kai, da ƙari.

A cikin wannan labarin, zaku koyi yadda ake saita NGINX azaman achingunƙwasa inunshi a cikin Linux don sa sabunan yanar gizonku suyi aiki yadda ya kamata.

Ya kamata ku sanya NGINX akan sabarku ta Linux, idan ba ku bi waɗannan jagororin ba don shigar da Nginx:

  • Yadda ake Shigar da Nginx akan CentOS 8
  • Yadda ake Shigar da Nginx akan CentOS 7

Acheunshin Cache A tsaye akan Nginx

Tsayayyen abun ciki abun ciki ne na gidan yanar gizo wanda ya kasance iri ɗaya (baya canzawa) a cikin shafuka. Misalan abun cikin tsaye sun hada da fayiloli kamar hotuna, bidiyo, takardu; Fayilolin CSS, da fayilolin JavaScript.

Idan gidan yanar gizan ku yayi amfani da abubuwa masu yawa sosai, to zaku iya inganta aikin ta ta hanyar ba da damar kwastomomi-inda masu bincike suke adana kwafin abun ciki don samun dama cikin sauri.

Saitin samfurin mai zuwa tafiya ce mai kyau, kawai maye gurbin www.example.com tare da URL na sunan gidan yanar gizon ku kuma yin gyare-gyare ga wasu sunayen hanyoyin kamar yadda ya dace.

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

Cache Dynamic Content akan Nginx

NGINX yana amfani da ɗakunan ajiya na diski mai ɗorewa wanda ke wani wuri cikin tsarin fayil ɗin gida. Don haka fara da ƙirƙirar kundin faifai na gida don adana abubuwan da aka adana.
# mkdir -p/var/cache/nginx

Na gaba, saita ikon mallaka daidai akan kundin adireshin. Ya kamata mallakar NGINX mai amfani (nginx) da rukuni (nginx) kamar haka.

# chown nginx:nginx /var/cache/nginx

Yanzu ci gaba don ganin yadda za'a kunna abun ciki mai motsi akan Nginx a cikin ɓangaren ƙasa.

Kunna Cache na FastCGI a cikin NGINX

FastCGI (ko FCGI) yarjejeniya ce da aka yi amfani da ita don musayar aikace-aikacen hulɗa kamar PHP tare da sabar yanar gizo kamar NGINX. Extensionari ne na CGI (Hanyar Hanyar Hanyar Kasuwanci).

Babban fa'idar FCGI shine cewa tana sarrafa buƙatun CGI da yawa a cikin tsari ɗaya. Ba tare da shi ba, dole ne shafin yanar gizon ya buɗe sabon tsari (wanda dole ne a sarrafa shi, aiwatar da buƙatarsa, kuma a rufe shi) don kowane buƙatar abokin ciniki don sabis.

Don aiwatar da rubutun PHP a cikin tura tarin LEMP, NGINX yana amfani da FPM (FastCGI Process Manager) ko PHP-FPM, sanannen madadin PHP FastCGI aiwatarwa. Da zarar aikin PHP-FPM yana gudana, an saita NGINX don buƙatun wakili zuwa gare shi don sarrafawa. Don haka za'a iya saita NGINX don adana martani daga uwar garken aikace-aikacen baya na PHP-FPM.

A karkashin NGINX, ana ayyana maɓallin abun cikin FastCGI ta amfani da umarnin da ake kira fastcgi_cache_path a cikin matakin-matakin http {} , a cikin tsarin daidaitawar NGINX. Hakanan zaka iya ƙara fastcgi_cache_key wanda ke bayyana maɓalli (mai neman buƙata) don ɓoyewa.

Bayan haka, don karanta matsayin cache na sama, ƙara umarnin add_header X-Cache-Status a cikin mahallin http {} - wannan yana da amfani don dalilai na kuskure.

Fatan za'ayi amfani da fayil din saitin sabar gidan yanar sadarwar a /etc/nginx/conf.d/testapp.conf ko /etc/nginx/sites-available/testapp.conf (karkashin Ubuntu da dangoginsu), buɗe fayil ɗin gyara kuma ƙara layuka masu zuwa a saman fayil ɗin.

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;

Umarnin fastcgi_cache_path yana ƙayyade adadin sigogi waɗanda sune:

  • /var/cache/nginx - hanyar zuwa kundin diski na cikin gida don ma'ajin.
  • matakan - yana bayyana matakan matsayin ma'aji na ajiya, shi ya kafa tsarin jagoranci na matakai biyu a ƙarƙashin/var/cache/nginx.
  • keys_zone (suna: girma) - yana ba da damar ƙirƙirar yankin ƙwaƙwalwar ajiya wanda aka ajiye duk maɓallan aiki da bayani game da bayanai (meta). Lura cewa adana makullin a cikin ƙwaƙwalwa yana saurin tsarin dubawa, ta hanyar sauƙaƙa wa NGINX don tantance ko MISS ko HIT, ba tare da bincika matsayin a kan faifai ba.
  • m Darajar 60m a cikin daidaiton misalinmu na nufin fayilolin da ba a isa ga bayan 60 ba za a cire su daga ma'ajiyar
  • max_size - yana ƙayyade iyakar girman ma'ajin. Akwai ƙarin sigogi da zaku iya amfani dasu anan (karanta bayanan NGINX don ƙarin bayani).

An bayyana masu canji a cikin umarnin fastcgi_cache_key a ƙasa.

NGINX yayi amfani dasu wajen kirga maballin (ganowa) na buƙata. Mahimmanci, don aika mayar da martani ga abokin ciniki, buƙatun dole ne ya sami mabuɗin ɗaya kamar amsar ɓoye.

  • $makirci - tsarin nema, HTTP ko HTTPS.
  • $request_method - hanyar neman, yawanci\"SAMU" ko\"POST".
  • $
  • $request_uri - na nufin cikakken neman URI (tare da mahawara).

Hakanan, $upstream_cache_status mai canji a cikin add_header umarnin X-Cache-Status ana lissafta shi don kowane buƙatun da NGINX ya amsa, ko MISS ne (amsar da ba a samu a ɓoye ba, ta samu daga sabar aikace-aikacen) ko HIT (amsar da aka bayar daga ɓoye) ko ɗayan sauran ƙimomin tallafi.

Na gaba, a cikin wuri umarnin wanda ya ba da buƙatun PHP zuwa PHP-FPM, yana amfani da umarnin fastcgi_cache don kunna cache ɗin da kuka bayyana a sama.

Hakanan saita lokacin ɓoye don amsoshi daban-daban ta amfani da fastcgi_cache_valid umarnin kamar yadda aka nuna.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Idan kawai aka ƙayyade lokacin ɓoye kamar yadda yake a cikin yanayinmu, kawai 200, 301, da 302 martani ne ke ajiye. Amma zaku iya tantance amsoshin a bayyane ko amfani da kowane (ga kowane lambar amsawa):

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

Ingantaccen Gyara Ayyukan CCI a kan Nginx

Don saita mafi ƙarancin lokacin buƙata tare da mabuɗi ɗaya dole ne a yi kafin a ɓoye amsa, a haɗa da fastcgi_cache_min_uses umarnin, ko dai a cikin http {} ko sabar {} ko wuri {} mahallin.

fastcgi_cache_min_uses  3

Don ba da damar sake tabbatar da abubuwan ɓuya da aka ƙare ta amfani da buƙatun da ke da alaƙa da filayen taken\"Idan-Canza-Tun” da\"Idan-Babu-Daidaita", ƙara umarnin fastcgi_cache_revalidate , a cikin http {} ko uwar garke {} ko wuri {} mahallin.

fastcgi_cache_revalidate on;

Hakanan zaka iya umurtar NGINX don isar da abubuwan da aka adana lokacin da asalin uwar garken ko sabar FCGI ke ƙasa, ta yin amfani da umarnin proxy_cache_use_stale , a cikin umarnin wurin.

Wannan samfurin samfurin yana nufin cewa lokacin da NGINX ya karɓi kuskure, lokaci-lokaci, da duk wani kuskuren da aka ƙayyade daga sabar ta sama kuma tana da tsayayyen sigar fayil ɗin da aka nema a cikin abubuwan da aka adana, yana ba da tsayayyen fayil.

proxy_cache_use_stale error timeout http_500;

Wani umarnin mai fa'ida don daidaita-aikin caca FCGI shine fastcgi_cache_background_update wanda ke aiki tare da proxy_cache_use_stale umarnin. Lokacin da aka kunna ta, tana umartar NGINX don taɗaɗa abun ciki lokacin da abokan ciniki suka nemi fayil ɗin da ya ƙare ko kuma yana kan aiwatar da sabuntawa daga sabar da ke sama.

fastcgi_cache_background_update on;

fastcgi_cache_lock yana da amfani kuma, don aikin cache yana daidaitawa ta yadda idan kwastomomi da yawa suka nemi abun ciki daya wanda ba a cikin ma'ajiyar ba, NGINX zai gabatar da buƙata ta farko kawai ga uwar garken da ke sama, cache the Amsawa sannan kuyi amfani da sauran buƙatun abokin ciniki daga cache.

fastcgi_cache_lock on;

Bayan yin duk canje-canjen da ke sama a cikin fayil ɗin sanyi na NGINX, adana kuma rufe shi. Bayan haka sai a bincika tsarin daidaitawa don duk wani kuskuren haɗin ginin kafin sake kunna sabis na NGINX.

# nginx -t
# systemctl restart nginx

Na gaba, gwada idan cache tana aiki yadda yakamata, gwada ƙoƙarin samun dama ga aikace-aikacen gidan yanar gizonku ko rukunin yanar gizo daga amfani da umarnin curl mai zuwa (karo na farko yakamata ya nuna MISS, amma buƙatun masu zuwa yakamata su nuna HIT kamar yadda aka nuna a cikin hoton hoton).

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

Anan ga wani hoton da yake nuna NGINX yana aiki da tsayayyen data.

Dingara Bayanai don Kewaya Kache

Zai yiwu a sanya sharuɗɗan da NGINX ba zai aiko da amsoshin ajiya ga abokan ciniki ba, ta amfani da umarnin fastcgi_cache_bypass Kuma don umartar NGINX kar a ɓoye martani daga uwar garke sam sam, yi amfani da fastcgi_no_cache .

Misali, idan kuna son POST buƙatun da URLs tare da layin tambaya koyaushe zuwa PHP. Na farko, bayyana sanarwa idan sanarwa don saita yanayin kamar haka.

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

Bayan haka kunna kunna banban da ke sama a cikin wuri umarnin wanda ya ba da buƙatun PHP zuwa PHP-FPM, ta amfani da fastcgi_cache_bypass da fastcgi_no_cache umarnin.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Akwai wasu sassa da yawa na rukunin yanar gizonku waɗanda ƙila ba za ku so su ba da damar ɓoye abun ciki ba. Mai zuwa misali daidaitaccen NGINX ne don haɓaka aikin shafin yanar gizon WordPress, wanda aka bayar akan bulogin nginx.com.

Don amfani da shi, yi canje-canje (kamar yanki, hanyoyi, filenames, da sauransu) don nuna abin da ke cikin yanayin ku.

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

Bayar da Wakilin Wakili a cikin NGINX

NGINX kuma yana goyan bayan ɓoyayyun martani daga wasu sabobin da aka sanya (wanda aka bayyana ta hanyar proxy_pass directory). Don wannan shari'ar gwajin, muna amfani da NGINX azaman wakili na baya ga aikace-aikacen gidan yanar gizo Node.js, don haka zamu ba NGINX damar zama ma'aji don aikace-aikacen Node.js. Duk umarnin umarnin da aka yi amfani dasu anan suna da ma'ana iri ɗaya kamar umarnin FastCGI a cikin sashin da ya gabata, don haka ba zamu sake bayyana su ba.

Don kunna caching na martani daga sabar proxied, haɗa da proxy_cache_path umarnin a cikin babban matakin http {} mahallin. Don tantance yadda ake adana buƙatun, haka nan za a iya ƙara umarnin proxy_cache_key kamar haka.

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;

Na gaba, kunna cache a cikin umarnin wuri.

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

Don ayyana yanayin da NGINX baya aika abubuwan da aka adana kuma baya ɓoye amsa ko kaɗan daga sabar da ke sama, hada da proxy_cache_bypass da proxy_no_cache .

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

Kyakkyawan Gyara Wakilin Wakilin Kuro

Umarnin masu zuwa suna da amfani don daidaita aikin aikin wakilin wakili. Hakanan suna da ma'anoni iri ɗaya kamar umarnin FastCGI.

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;

Don ƙarin bayani da umarnin tsara kayan aiki, duba takaddun don manyan matakan biyu ngx_http_proxy_module.

Resourcesarin Bayanai: Nasihu don Inganta Ayyukan WordPress.