Otu esi echekwa ọdịnaya na NGINX


NGINX bụ isi mmalite mepere emepe, sava weebụ na-arụ ọrụ dị elu nke na-eme ka ọdịnaya na nnyefe ngwa ngwa ngwa ngwa, na-eme ka nchekwa dịkwuo elu, ma melite scalability. Otu n'ime ihe ndị a na-ejikarị eme ihe nke Nginx bụ caching ọdịnaya, nke bụ ụzọ kachasị dị irè isi kwalite arụmọrụ nke weebụsaịtị.

Ị nwere ike iji NGINX iji mee ka sava sitere na mpaghara mee ngwa ngwa site na ịhazi ya ka ọ bụrụ nzaghachi cache sitere na sava dị elu yana ịmepụta sava ihu maka netwọk nnyefe ọdịnaya (CDNs). NGINX na-enye ike ụfọdụ CDN kachasị ukwuu.

Mgbe ahazi ya dị ka cache, NGINX ga-:

  • cache static na ike ọdịnaya.
  • welite arụmọrụ ọdịnaya dị ike site na iji obere caching.
  • na-eje ozi ọdịnaya adịgboroja ka ị na-emezigharị n'azụ maka ịrụ ọrụ ka mma.
  • wepu ma ọ bụ tọọ nkụnye eji isi mee Cache-Control, yana ndị ọzọ.

N'isiokwu a, ị ga-amụta otú e si ahazi NGINX dị ka caching ọdịnaya na Linux iji mee ka sava weebụ gị na-arụ ọrụ nke ọma dị ka o kwere mee.

Ịkwesịrị itinye NGINX na sava Linux gị, ọ bụrụ na esoghị ntuziaka ndị a iji wụnye Nginx:

  • Otu esi etinye Nginx na CentOS 8
  • Otu esi etinye Nginx na CentOS 7

Ọdịnaya Cache Static na Nginx

Ọdịnaya kwụ ọtọ bụ ọdịnaya nke weebụsaịtị nke na-adị otu (anaghị agbanwe agbanwe) n'ofe ibe. Ọmụmatụ nke ọdịnaya kwụ ọtọ gụnyere faịlụ dịka onyonyo, vidiyo, akwụkwọ; Faịlụ CSS, na faịlụ JavaScript.

Ọ bụrụ na ebe nrụọrụ weebụ gị na-eji ọtụtụ ọdịnaya static eme ihe, mgbe ahụ ị nwere ike ịkwalite arụmọrụ ya site na ịme ka caching n'akụkụ ndị ahịa nwee ebe ihe nchọgharị na-echekwa nnomi nke ọdịnaya static maka ịnweta ngwa ngwa.

Nhazi ihe nlele na-esote bụ ezigbo ịga, naanị dochie www.example.com na URL nke aha weebụsaịtị gị wee gbanwee aha ụzọ ndị ọzọ dị ka o kwesịrị.

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ịnaya dị egwu cache na Nginx

NGINX na-eji ihe nchekwa diski na-adịgide adịgide nke dị n'otu ebe na sistemụ faịlụ mpaghara. Yabụ malite site na imepụta ndekọ ndekọ diski mpaghara maka ịchekwa ọdịnaya echekwara.
# mkdir -p /var/cache/nginx

Na-esote, tọọ ikike kwesịrị ekwesị na ndekọ cache. Ọ ga-abụ nke NGINX onye ọrụ (nginx) na otu (nginx) dị ka ndị a.

# chown nginx:nginx /var/cache/nginx

Ugbu a gaa n'ihu ka ịhụ ka esi eme ka ọdịnaya dị ike na Nginx dị na ngalaba dị n'okpuru.

Na-eme ka FastCGI cache na NGINX

FastCGI (ma ọ bụ FCGI) bụ usoro a na-ejikarị eme ihe maka ịmekọrịta ngwa mmekọrịta dịka PHP na sava weebụ dị ka NGINX. Ọ bụ ndọtị nke CGI (Common Gateway Interface).

Isi uru nke FCGI bụ na ọ na-achịkwa ọtụtụ arịrịọ CGI n'otu usoro. Enweghị ya, sava weebụ ga-emepe usoro ọhụrụ (nke a ga-achịkwa, hazie arịrịọ, ma mechie) maka arịrịọ onye ahịa ọ bụla maka ọrụ.

Iji hazie script PHP n'ime mkpoko LEMP, NGINX na-eji FPM (FastCGI Process Manager) ma ọ bụ PHP-FPM, mmemme PHP FastCGI ọzọ na-ewu ewu. Ozugbo usoro PHP-FPM na-agba ọsọ, a haziri NGINX ka ọ bụrụ arịrịọ proxy maka nhazi ya. Yabụ na enwere ike ịhazi NGINX ka ọ bụrụ nzaghachi cache sitere na sava ngwa azụ azụ PHP-FPM.

N'okpuru NGINX, a na-ekwupụta cache ọdịnaya FastCGI site na iji ntuziaka akpọrọ fastcgi_cache_path na ọkwa dị elu http{}, n'ime nhazi nhazi NGINX. Ị nwekwara ike ịgbakwunye fastcgi_cache_key nke na-akọwa igodo (ihe nchọpụta arịrịọ) maka caching.

E wezụga nke ahụ, ka ịgụọ ọkwa cache nke dị n'elu, tinye ntụziaka add_header X-Cache-Status n'ime http{} ọnọdụ - nke a bara uru maka ebumnuche nbipu.

Na-eche na faịlụ nhazi ngọngọ ihe nkesa saịtị gị dị na /etc/nginx/conf.d/testapp.conf ma ọ bụ /etc/nginx/sites-available/testapp.conf (n'okpuru Ubuntu na usoro ya), mepee faịlụ nke edezi ma gbakwunye ahịrị ndị a n'elu faịlụ ahụ.

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;

Ntuziaka fastcgi_cache_path na-akọwapụta ọnụọgụ nke paramita bụ:

  • /var/cache/nginx – ụzọ na ndekọ diski mpaghara maka cache.
  • ọkwa - na-akọwa ọkwa ọkwa nke cache, ọ na-ewepụta ọkwa ndekọ aha ọkwa abụọ n'okpuru /var/cache/nginx.
  • keys_zone (aha: nha) - na-enyere aka ịmepụta mpaghara ebe nchekwa nkekọrịta ebe echekwara igodo niile na ozi gbasara data (meta). Rịba ama na ịchekwa igodo na ebe nchekwa na-eme ka usoro nlele ahụ dịkwuo ngwa, site n'ime ka ọ dịrị NGINX mfe ịchọpụta ma ọ bụ MISS ma ọ bụ HIT, na-enweghị ịlele ọkwa na diski.
  • adịghị arụ ọrụ - na-akọwapụta oge ole data echekwara nke na-adịghị enweta n'oge a kapịrị ọnụ ga-ehichapụ na cache n'agbanyeghị na ọ dị ọhụrụ. Uru nke 60m na nhazi ihe atụ anyị pụtara na a ga-ewepụ faịlụ ndị na-enwetaghị mgbe 60 gachara na cache.
  • max_size – na-akọwapụta oke nke cache. Enwere paramita ndị ọzọ ị nwere ike iji ebe a (gụọ akwụkwọ NGINX maka ozi ndị ọzọ).

A kọwara mgbanwe ndị dị na iwu fastcgi_cache_key n'okpuru.

NGINX na-eji ha na-agbakọ igodo (ihe nchọpụta) nke arịrịọ. N'ụzọ dị mkpa, iji zipu nzaghachi cache na onye ahịa, arịrịọ ahụ ga-enwerịrị otu igodo ahụ dị ka nzaghachi echekwara.

  • $atụ - atụmatụ arịrịọ, HTTP ma ọ bụ HTTPS.
  • $request_method – usoro arịrịọ, na-emekarị \GET ma ọ bụ \POST
  • $host – nke a nwere ike ịbụ aha nnabata site na ahịrị arịrịọ, ma ọ bụ aha nnabata sitere na ngalaba nkụnye eji isi mee ihe \Ọbịa ma ọ bụ aha nkesa nke dabara arịrịọ, n'usoro nke mbụ.
  • $request_uri – pụtara URI izizi zuru ezu (ya na arụmụka).

Ọzọkwa, $upstream_cache_status agbanwe na add_header X-Cache-Status ntuziaka ka a na-agbakọ maka arịrịọ ọ bụla NGINX zara, ma ọ bụ MISS (azịza nke ahụghị na cache, enwetara site na sava ngwa) ma ọ bụ HIT (azịza sitere na cache) ma ọ bụ ụkpụrụ ọ bụla akwadoro.

Na-esote, n'ime iwu ebe nke na-enyefe arịrịọ PHP na PHP-FPM, na-eji iwu fastcgi_cache mee ka cache nke ị kọwapụtara n'elu rụọ ọrụ.

Tọọkwa oge nbanye maka nzaghachi dị iche iche site na iji iwu fastcgi_cache_valid dị ka egosiri.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Ọ bụrụ na akọwapụtara naanị oge caching dị ka ọ dị na anyị, naanị 200, 301, na 302 nzaghachi ka echekwara. Mana ị nwekwara ike kọwapụta nzaghachi ndị ahụ n'ụzọ doro anya ma ọ bụ jiri nke ọ bụla (maka koodu nzaghachi ọ bụla):

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

Ọma-Tuning FastCGI Caching Performance na Nginx

Iji tọọ ọnụ ọgụgụ opekempe, a ga-emerịrị arịrịọ nwere otu igodo tupu echekwaa nzaghachi, tinye iwu fastcgi_cache_min_uses, ma na http{} ma ọ bụ >sava{} ma ọ bụ ebe{} okirikiri.

fastcgi_cache_min_uses  3

Iji mee ka nkwado ndabere nke ihe cache mebiela site na iji arịrịọ ọnọdụ nwere mpaghara nkụnye eji isi mee \If-Modified-Since na \If-None-Match, tinye iwu fastcgi_cache_revalidate, n'ime http{} ma ọ bụ sava{} ma ọ bụ ebe{} okirikiri.

fastcgi_cache_revalidate on;

Ị nwekwara ike ịnye NGINX ka o wepụta ọdịnaya echekwara mgbe ihe nkesa mmalite ma ọ bụ ihe nkesa FCGI dara, na-eji iwu proxy_cache_use_stale, n'ime ntuziaka ọnọdụ.

Nhazi ihe atụ a pụtara na mgbe NGINX na-enweta njehie, nkwụsị oge, na njehie ọ bụla akọwapụtara site na ihe nkesa dị elu ma nwee ụdị nke faịlụ a rịọrọ na ọdịnaya echekwara, ọ na-ebuga faịlụ stale.

proxy_cache_use_stale error timeout http_500;

Ntuziaka ọzọ bara uru iji melite arụmọrụ caching FCGI bụ fastcgi_cache_background_update nke na-arụ ọrụ na njikọ proxy_cache_use_stale ntuziaka. Mgbe etinyere ya, ọ na-enye NGINX ntụziaka ka ọ na-eje ozi ọdịnaya mgbe ndị ahịa na-arịọ maka faịlụ mebiela ma ọ bụ na-emelite site na ihe nkesa dị elu.

fastcgi_cache_background_update on;

The fastcgi_cache_lock bara uru kwa, maka ịrụ ọrụ nke ọma na-arụ ọrụ nke ọma na ọ bụrụ na ọtụtụ ndị ahịa na-arịọ maka otu ọdịnaya nke na-adịghị na cache, NGINX ga-ebuga naanị arịrịọ mbụ na sava dị elu, cache nke ahụ. nzaghachi wee nye arịrịọ ndị ahịa ndị ọzọ si na cache.

fastcgi_cache_lock on;

Mgbe ịmechara mgbanwe niile dị n'elu na faịlụ nhazi NGINX, chekwaa ma mechie ya. Wee lelee nhazi nhazi maka njehie syntax ọ bụla tupu ịmalitegharịa ọrụ NGINX.

# nginx -t
# systemctl restart nginx

Na-esote, nwalee ma ọ bụrụ na cache na-arụ ọrụ nke ọma, gbalịa ịnweta ngwa weebụ ma ọ bụ saịtị gị site na iji iwu curl na-esote (oge mbụ kwesịrị igosi MISS, mana arịrịọ na-esote kwesịrị igosi HIT dị ka egosiri na nseta ihuenyo).

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

Nke a bụ nseta ihuenyo ọzọ na-egosi NGINX na-eje ozi stale data.

Na-agbakwụnye ihe dị iche na cache gafere

Ọ ga-ekwe omume ịtọ ọnọdụ n'okpuru nke NGINX agaghị ezigara ndị ahịa nzaghachi cache, na-eji iwu fastcgi_cache_bypass. Na iji kụziere NGINX ka ọ ghara nzaghachi cache sitere na sava dị elu, jiri fastcgi_no_cache.

Dịka ọmụmaatụ, ọ bụrụ na ịchọrọ arịrịọ POST na URL nwere eriri ajụjụ ka ị na-aga PHP mgbe niile. Nke mbụ, kwupụta ma ọ bụrụ nkwupụta ka ịtọọ ọnọdụ dịka ndị a.

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

Wee mee ka ewepu nke dị n'elu na ntụziaka ebe nke na-ebufe arịrịọ PHP na PHP-FPM, na-eji fastcgi_cache_bypass na fastcgi_no_cache ntụziaka.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Enwere ọtụtụ akụkụ ndị ọzọ nke saịtị gị nke ị nwere ike ọ gaghị achọ iji mee ka caching ọdịnaya. Ndị na-esonụ bụ ihe atụ Nhazi NGINX maka imeziwanye arụmọrụ nke saịtị WordPress, nyere na blọọgụ nginx.com.

Iji jiri ya, mee mgbanwe (dị ka ngalaba, ụzọ, aha faịlụ, wdg) iji gosipụta ihe dị na gburugburu gị.

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

Na-eme ka cache proxy dị na NGINX

NGINX na-akwadokwa nchikota nzaghachi sitere na sava ndị ọzọ proxied (nke proxy_pass ntụziaka kọwara). Maka ikpe ule a, anyị na-eji NGINX dị ka onye nnọchi anya maka ngwa weebụ Node.js, yabụ anyị ga-eme ka NGINX dị ka cache maka ngwa Node.js. Ntuziaka nhazi niile ejiri mee ihe ebe a nwere nkọwa yiri nke ahụ dịka ntuziaka FastCGI na ngalaba gara aga, yabụ anyị agaghị akọwa ha ọzọ.

Iji mee ka caching nke nzaghachi sitere na sava proxied, tinye iwu proxy_cache_path n'ọkwa ọkwa http{}. Iji kọwapụta otu esi echekwa arịrịọ, ị nwekwara ike itinye iwu proxy_cache_key ka ndị a.

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-esote, mee ka cache rụọ ọrụ na ntuziaka ọnọdụ.

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

Iji kọwapụta ọnọdụ n'okpuru NGINX anaghị eziga ọdịnaya echekwara yana ọ naghị echekwa nzaghachi ọ bụla site na sava dị elu, tinye proxy_cache_bypass na proxy_no_cache.

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

Ọma-Tuning Proxy Cache Performance

Ntuziaka ndị a bara uru maka imezigharị arụmọrụ nke cache proxy. Ha nwekwara otu ọ pụtara dịka ntuziaka 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;

Maka ozi ndị ọzọ yana ntuziaka nhazi caching, hụ akwụkwọ maka modul abụọ bụ isi ngx_http_proxy_module.

Ihe mgbakwunye: Ndụmọdụ maka imelite arụmọrụ WordPress.