NGINX-de mazmuny nädip keşde saklamaly


NGINX mazmuny we amaly gowşurmagy çaltlaşdyrýan, howpsuzlygy ýokarlandyrýan we göwrümliligini ýokarlandyrýan, açyk çeşme, ýokary öndürijilikli web serweri bolmak. Nginx-iň iň köp ulanylýan ýagdaýlaryndan biri, web sahypasynyň işini ýokarlandyrmagyň iň täsirli usuly bolan Content Caching.

NGINX-i ýerli serwerlerden ýokary akymdaky serwerleriň jogaplaryny keş görnüşinde düzmek we mazmun gowşuryş ulgamlary (CDN) üçin serwer döretmek arkaly sazlamak arkaly ulanyp bilersiňiz. NGINX iň uly CDN-leriň käbirini güýçlendirýär.

Keş görnüşinde düzülende NGINX:

  • keş keş statiki we dinamiki mazmun.
  • mikro-keş bilen dinamiki mazmun öndürijiligini gowulandyrmak.
  • has gowy öndürijilik üçin fonda täzeden gözden geçirilende köne mazmuna hyzmat ediň.
  • Keş-Dolandyryş sözbaşylaryny ýok etmek ýa-da bellemek. we ş.m.

Bu makalada web serwerleriňizi mümkin boldugyça netijeli işlemek üçin NGINX-ni Linux-da Mazmun keşi hökmünde nädip sazlamalydygyny öwrenersiňiz.

Linux serweriňizde NGINX gurnalan bolmaly, eger Nginx gurmak üçin şu gollanmalary ýerine ýetirmeseňiz:

  • Centgin 8-de Nginx-i nädip gurmaly
  • Centgin 7-de Nginx-i nädip gurmaly

Nginx-de statiki mazmun

Statik mazmun, sahypalaryň arasynda üýtgemän (üýtgemeýän) web sahypasynyň mazmunydyr. Statiki mazmuna mysallar suratlar, wideolar, resminamalar ýaly faýllary öz içine alýar; CSS faýllary we JavaScript faýllary.

Web sahypaňyz statiki mazmundan köp peýdalanýan bolsa, brauzer has çalt girmek üçin statiki mazmunyň nusgalaryny saklaýan ýerinde müşderi keş keşini açyp, öndürijiligini optimizirläp bilersiňiz.

Aşakdaky nusga konfigurasiýasy gowy gidýär, diňe www.example.com web sahypaňyzyň adynyň URL-i bilen çalşyň we beýleki ýol atlaryna üýtgeşmeler giriziň.

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

Nginx-de keş keş dinamiki mazmuny

NGINX ýerli faýl ulgamynyň bir ýerinde ýerleşýän disk esasly disk keşini ulanýar. Şonuň üçin keş görnüşli mazmuny saklamak üçin ýerli disk katalogyny döretmekden başlaň.
# mkdir -p/var/keş/nginx

Ondan soň, keş keşbine degişli eýeçiligi belläň. NGINX ulanyjysyna (nginx) we topara (nginx) aşakdaky ýaly eýeçilik etmeli.

# chown nginx:nginx /var/cache/nginx

Indi aşakdaky bölümdäki Nginx-de dinamiki mazmuny nädip işletmelidigini görmek üçin dowam ediň.

NGINX-de FastCGI Keşini açmak

FastCGI (ýa-da FCGI), PHP ýaly interaktiw programmalary NGINX ýaly web serwerleri bilen interfeýs etmek üçin giňden ulanylýan protokol. Bu CGI-iň giňelmesi (Umumy şlýuz interfeýsi).

FCGI-iň esasy artykmaçlygy, bir amalda birnäçe CGI haýyşyny dolandyrmagydyr. Şeýle bolmazdan, web serwer her bir müşderiniň hyzmat islegi üçin täze bir prosesi açmaly (gözegçilikde saklanmaly, haýyşy gaýtadan işlemeli we ýapylmaly).

PHP skriptlerini LEMP stack ýerleşdirmekde gaýtadan işlemek üçin NGINX, PHP FastCGI meşhur alternatiw ýerine ýetiriş FPM (FastCGI Prosess Manager) ýa-da PHP-FPM ulanýar. PHP-FPM prosesi başlansoň, NGINX gaýtadan işlemek üçin proksi haýyşlaryna düzüldi. Şeýlelik bilen, NGINX, PHP-FPM arka programma serwerinden jogaplary keş görnüşinde düzmek üçin hem düzülip bilner.

NGINX astynda, FastCGI mazmun keşi, NGINX konfigurasiýa gurluşynyň çäginde iň ýokary derejeli http {} kontekstinde fastcgi_cache_path atly görkezmäni ulanyp yglan edilýär. Şeýle hem keş keşi üçin açary (kesgitleýji kesgitleýji) kesgitleýän fastcgi_cache_key goşup bilersiňiz.

Mundan başga-da, ýokarky akym keş keşbini okamak üçin, http {} kontekstinde add_header X-Cache-Status görkezmesini goşuň - bu düzediş maksatlary üçin peýdaly.

Sahypaňyzyň serwer blok konfigurasiýa faýlynyň /etc/nginx/conf.d/testapp.conf ýa-da /etc/nginx/sites-available/testapp.conf (Ubuntu we onuň emele gelenleri astynda) ýerleşendigini çaklasak, redaktirleme faýlyny açyň we goşuň faýlyň ýokarsyndaky aşakdaky setirler.

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 direktiwasy parametrleriň sanyny kesgitleýär:

  • /var/cache/nginx - keş üçin ýerli disk katalogyna barýan ýol.
  • derejeler - keşiň iýerarhiýa derejesini kesgitleýär,/var/cache/nginx astynda iki derejeli katalog iýerarhiýasyny döredýär.
  • key_zone (ady: ululygy) - ähli işjeň düwmeler we maglumatlar (meta) hakda maglumatlar saklanýan umumy ýat zolagyny döretmäge mümkinçilik berýär. Düwmeleri ýatda saklamak, NGINX-iň diskdäki ýagdaýyny barlamazdan, MISS ýa-da HIT-i kesgitlemegini aňsatlaşdyryp, barlag işini çaltlaşdyrýandygyny ýadyňyzdan çykarmaň.
  • hereketsiz - görkezilen wagtyň içinde girip bolmaýan keş keşleri, täzeligine garamazdan keşden pozulýan wagtyny kesgitleýär. Mysal konfigurasiýamyzda 60m bahasy, 60-dan soň girilmedik faýllaryň keşden aýrylmagyny aňladýar.
  • max_size - keşiň iň uly ululygyny kesgitleýär. Bu ýerde ulanyp boljak has köp parametr bar (has giňişleýin maglumat üçin NGINX resminamalaryny okaň).

fastcgi_cache_key direktiwasyndaky üýtgeýjiler aşakda düşündirilýär.

NGINX haýyşyň açaryny (kesgitleýjisini) hasaplamakda ulanýar. Möhümi, müşderä keş görnüşli jogap ibermek üçin haýyşda keş görnüşli jogap ýaly açar bolmaly.

  • $shema - haýyş shemasy, HTTP ýa-da HTTPS.
  • $request_method - haýyş usuly, adatça\GET ýa-da\POST.
  • $host - bu haýyş setirinden host ady ýa-da\Host haýyş sözbaşy meýdanyndaky host ady ýa-da haýyşa laýyk gelýän serwer ady, tertip boýunça bolup biler.
  • $request_uri - doly asyl haýyş URI (argumentler bilen) diýmekdir.

Şeýle hem, add_header X-Cache-Status direktiwasyndaky $upstream_cache_status üýtgeýjisi, NGINX-iň MISS bolandygyna jogap berýän her haýyşy üçin hasaplanýar (keşde tapylmadyk jogap, programma serwerinden alnan) ýa-da HIT (keşden berlen jogap) ýa-da beýleki goldanýan bahalaryň islendigi.

Ondan soň, PHP haýyşlaryny PHP-FPM-e iberýän ýerleşiş direktiwasynyň içinde ýokarda kesgitlän keşiňizi işjeňleşdirmek üçin fastcgi_cache görkezmelerini ulanýar.

Şeýle hem, görkezilişi ýaly fastcgi_cache_valid direktiwasyny ulanyp, dürli jogaplar üçin keş keşini belläň.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Diňe keş keşi biziň ýagdaýymyzdaky ýaly görkezilen bolsa, diňe 200, 301 we 302 jogap keş görnüşinde saklanýar. Alsoöne jogaplary aç-açan kesgitläp ýa-da islendik birini ulanyp bilersiňiz (islendik jogap kody üçin):

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

Nginx-de çalt düzmek FastCGI keş keşdesi

Jogap keş saklanmazdan ozal şol bir açar bilen haýyş edilmeli iň az gezek bellemek üçin, http {} ýa-da fastcgi_cache_min_uses görkezmesini goşuň. > serwer {} ýa-da ýerleşýän ýeri {} konteksti.

fastcgi_cache_min_uses  3

Möhleti geçen keş keşlerini\If-Modified-Since we\If-None-Match sözbaşy meýdanlary bilen şertli haýyşlary ulanyp, gaýtadan tassyklamagy üpjün etmek üçin, fastcgi_cache_revalidate direktiwasyny goşuň. > http {} ýa-da serwer {} ýa-da ýerleşiş {} kontekstinde.

fastcgi_cache_revalidate on;

Şeýle hem, NGINX-a deslapky serwer ýa-da FCGI serweri işlemänsoň, ýerleşýän ýer direktiwasynyň içinde proxy_cache_use_stale direktiwasyny ulanyp, keş görnüşli mazmuny ibermegi tabşyryp bilersiňiz.

Bu nusga konfigurasiýasy, NGINX ýokarky serwerden säwlik, wagt gutarmagy we görkezilen ýalňyşlyklaryň haýsydyr birini alsa we keş görnüşinde mazmuny talap edilýän faýlyň köne wersiýasy bar bolsa, köne faýly berýär.

proxy_cache_use_stale error timeout http_500;

FCGI keş keşini gowy düzmek üçin başga bir peýdaly görkezme, proxy_cache_use_stale direktiwasy bilen bilelikde işleýän fastcgi_cache_background_update . Işledilende, NGINX müşderileriň möhleti gutaran ýa-da ýokarky serwerden täzelenjek bir faýly talap edenlerinde köne mazmuna hyzmat etmegi tabşyrýar.

fastcgi_cache_background_update on;

fastcgi_cache_lock hem peýdaly, sebäbi keş keşini gowy düzmek üçin birnäçe müşderi keşde bolmadyk şol bir mazmuny sorasa, NGINX diňe ýokarky serwere ilkinji haýyşy iberer, keş keşini jogap, soňra keşden beýleki müşderileriň isleglerine hyzmat ediň.

fastcgi_cache_lock on;

NGINX konfigurasiýa faýlynda ýokardaky ähli üýtgeşmeleri girizeniňizden soň, saklaň we ýapyň. Soňra NGINX hyzmatyny täzeden açmazdan ozal sintaksis säwlikleriniň konfigurasiýa gurluşyny barlaň.

# nginx -t
# systemctl restart nginx

Ondan soň, keş keşiniň kadaly işleýändigini barlaň, web programmaňyza ýa-da sahypaňyza aşakdaky curl buýrugyny ulanmaga synanyşyň (ilkinji gezek MISS görkezmeli, ýöne soňraky haýyşlar skrinshotda görkezilişi ýaly HIT görkezmeli).

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

Ine, NGINX köne maglumatlary görkezýän başga bir skrinshot.

Keşden aýlanyp geçmek üçin kadadan çykmalar goşmak

NGINX, fastcgi_cache_bypass direktiwasyny ulanyp, müşderilere keş görnüşli jogaplary ibermeli däl şertleri kesgitlemek mümkin. NGINX-a ýokarky serwerden gelen jogaplary asla keşde saklamazlygy tabşyrmak üçin fastcgi_no_cache ulanyň.

Mysal üçin, POST haýyşlaryny we talap setirli URL-leriň hemişe PHP-e gitmegini isleseňiz. Ilki bilen şerti aşakdaky ýaly kesgitlemek üçin if jümlesini yglan ediň.

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

Soňra ýokardaky kadadan çykmany fastcgi_cache_bypass we fastcgi_no_cache direktiwalaryny ulanyp, PHP haýyşlaryny PHP-FPM-e geçirýän ýerleşiş direktiwasynda işjeňleşdiriň.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Sahypaňyzyň başga bir bölegi bar, olar üçin mazmun keşini açmak islemeýärsiňiz. Aşakda nginx.com blogynda berlen WordPress sahypasynyň işleýşini gowulandyrmak üçin NGINX konfigurasiýasy mysaldyr.

Ony ulanmak üçin daş-töweregiňizdäki zatlary görkezmek üçin üýtgeşmeler giriziň (domen, ýollar, faýl atlary we ş.m.).

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

NGINX-de proksi keşini açmak

NGINX, beýleki proksi serwerlerden ( proxy_pass direktiwasy bilen kesgitlenýär) jogaplaryň keş görnüşini hem goldaýar. Bu synag üçin, NGINX-ni Node.js web programmasy üçin ters proksi hökmünde ulanýarys, şonuň üçin NGINX-i Node.js programmasy üçin keş hökmünde ulanarys. Bu ýerde ulanylýan ähli konfigurasiýa görkezmeleriniň, öňki bölümdäki FastCGI görkezmeleri bilen meňzeş manylary bar, şonuň üçin olary ýene düşündirmeris.

Ygtyýarly serwerden jogaplaryň keş keşini açmak üçin iň ýokary derejeli http {} kontekstine proxy_cache_path görkezmesini goşuň. Islegleriň nähili keşde saklanýandygyny kesgitlemek üçin aşakdaky ýaly proxy_cache_key görkezmesini goşup bilersiňiz.

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;

Ondan soň, keş görkezmesini görkeziň.

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

NGINX-iň keş görnüşli mazmuny ibermeýän we ýokarky serwerden asla jogap keşini saklamaýan şertleri kesgitlemek üçin proxy_cache_bypass we proxy_no_cache goşuň.

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

Proksi keş keşini gowy düzmek

Proksi keşiň işleýşini gowy düzmek üçin aşakdaky görkezmeler peýdalydyr. Şeýle hem, olaryň “FastCGI” direktiwalary ýaly manylary bar.

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;

Has giňişleýin maglumat we keş keş konfigurasiýa görkezmeleri üçin ngx_http_proxy_module iki esasy modul üçin resminamalara serediň.

Goşmaça çeşmeler: WordPress-iň işleýşini gowulandyrmak üçin maslahatlar.