Bii o ṣe le Kaṣe akoonu ni NGINX


NGINX jẹ orisun ṣiṣọkan ti a ṣopọ, olupin ayelujara ti o ṣiṣẹ giga ti o yara akoonu ati ifijiṣẹ ohun elo, mu aabo pọ si, ati imudarasi iwọn. Ọkan ninu awọn ọran lilo ti o wọpọ julọ ti Nginx jẹ Caching akoonu, eyiti o jẹ ọna ti o munadoko julọ lati ṣe alekun iṣẹ oju opo wẹẹbu kan.

O le lo NGINX lati mu yara awọn olupin abinibi agbegbe mu nipa tito leto si awọn idahun kaṣe lati awọn olupin oke ati lati ṣẹda awọn olupin eti fun awọn nẹtiwọọki ifijiṣẹ akoonu (CDNs). Awọn agbara NGINX diẹ ninu awọn CDN ti o tobi julọ.

Nigbati o ba tunto bi kaṣe, NGINX yoo:

    kaṣe aimi ati akoonu ti o ni agbara.
  • mu ilọsiwaju iṣiṣẹ akoonu agbara ṣiṣẹ pẹlu caching-micro.
  • sin akoonu ti o gboju lakoko ti o tun sọ ni abẹlẹ fun iṣẹ ti o dara julọ.
  • fagile tabi ṣeto awọn akọle ti Iṣakoso-kaṣe, ati diẹ sii.

Ninu akọle yii, iwọ yoo kọ bi o ṣe le tunto NGINX bi Caching akoonu ni Linux lati jẹ ki awọn olupin ayelujara rẹ ṣiṣẹ daradara bi o ti ṣee.

O yẹ ki o fi NGINX sori ẹrọ olupin Linux rẹ, ti ko ba tẹle awọn itọsọna wọnyi lati fi sori ẹrọ Nginx:

  • Bii o ṣe le Fi Nginx sori CentOS 8
  • Bi a ṣe le Fi Nginx sori CentOS 7

Akoonu Aimi Kaṣe lori Nginx

Akoonu aimi jẹ akoonu ti oju opo wẹẹbu kan ti o wa kanna (ko yipada) kọja awọn oju-iwe. Awọn apẹẹrẹ ti akoonu aimi pẹlu awọn faili bii awọn aworan, awọn fidio, awọn iwe aṣẹ; Awọn faili CSS, ati awọn faili JavaScript.

Ti oju opo wẹẹbu rẹ ba lo ọpọlọpọ akoonu aimi, lẹhinna o le jẹ ki iṣiṣẹ rẹ pọ si nipa ṣiṣe kaṣe ẹgbẹ alabara nibiti ẹrọ aṣawakiri naa tọju awọn ẹda ti akoonu aimi fun iraye si yarayara.

Iṣeto apẹẹrẹ atẹle ni lilọ ti o dara, kan rọpo www.example.com pẹlu URL ti orukọ oju opo wẹẹbu rẹ ati ṣe awọn iyipada si awọn orukọ ọna miiran bi o ti yẹ.

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

Akoonu Dynamic Kaṣe lori Nginx

NGINX nlo kaṣe ti o da lori disk ti o wa ni ibikan ninu eto faili agbegbe. Nitorinaa bẹrẹ nipa ṣiṣẹda itọsọna disk agbegbe fun titoju akoonu ti a fi pamọ.
# mkdir -p/var/kaṣe/nginx

Nigbamii, ṣeto ohun-ini ti o yẹ lori itọsọna kaṣe. O yẹ ki o jẹ ohun-ini nipasẹ olumulo NGINX (nginx) ati ẹgbẹ (nginx) bi atẹle.

# chown nginx:nginx /var/cache/nginx

Bayi tẹsiwaju siwaju lati wo bii o ṣe le mu akoonu agbara ṣiṣẹ lori Nginx ni apakan isalẹ.

Muu Kaṣe FastCGI ṣiṣẹ ni NGINX

FastCGI (tabi FCGI) jẹ ilana ti a lo ni ibigbogbo fun interfacing awọn ohun elo ibaraenisepo bi PHP pẹlu awọn olupin wẹẹbu bii NGINX. O jẹ ifaagun ti CGI (Ifilelẹ Ẹnubode Ẹnu).

Anfani akọkọ ti FCGI ni pe o ṣakoso ọpọlọpọ awọn ibeere CGI ni ilana kan. Laisi rẹ, aṣawakiri ni lati ṣii ilana tuntun kan (ti o ni lati ṣakoso, ṣe ilana ibeere kan, ati ni pipade) fun gbogbo ibeere alabara fun iṣẹ kan.

Lati ṣe ilana awọn iwe afọwọkọ PHP ni imuṣiṣẹ akopọ LEMP, NGINX lo FPM (Oluṣakoso ilana FastCGI) tabi PHP-FPM, yiyan yiyan PHP FastCGI olokiki. Lọgan ti ilana PHP-FPM nṣiṣẹ, NGINX ti wa ni tunto si awọn ibeere aṣoju si rẹ fun ṣiṣe. Nitorinaa NGINX tun le ṣe tunto si awọn idahun kaṣe lati olupin ohun elo ẹhin PHP-FPM.

Labẹ NGINX, a kede kaṣe akoonu FastCGI ni lilo itọsọna ti a pe ni fastcgi_cache_path ni ipele oke-ipele http {} , laarin iṣeto iṣeto NGINX. O tun le ṣafikun fastcgi_cache_key eyiti o ṣalaye bọtini kan (idanimọ ibeere) fun kaṣe.

Yato si, lati ka ipo kaṣe iloro naa, ṣafikun itọsọna add_header X-Cache-Status laarin ipo http {} - eyi wulo fun awọn idi n ṣatunṣe aṣiṣe.

Ti o ba ro pe faili iṣeto iṣeto olupin olupin rẹ wa ni /etc/nginx/conf.d/testapp.conf or /etc/nginx/sites-available/testapp.conf (labẹ Ubuntu ati awọn itọsẹ rẹ), ṣii faili ti ṣiṣatunkọ ki o fikun awọn ila wọnyi ni oke faili naa.

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;

Itọsọna fastcgi_cache_path n ṣalaye nọmba awọn ipele ti o jẹ:

  • /var/kaṣe/nginx - ọna si itọsọna disk agbegbe fun kaṣe.
  • awọn ipele - n ṣalaye awọn ipele logalomomoise ti kaṣe kan, o ṣeto ilana ilana itọsọna ipele meji labẹ/var/kaṣe/nginx.
  • keys_zone (orukọ: iwọn) - jẹ ki ẹda ti agbegbe iranti ti o pin nibiti gbogbo awọn bọtini ti nṣiṣe lọwọ ati alaye nipa data (meta) ti wa ni fipamọ. Akiyesi pe titoju awọn bọtini inu iranti yara iyara ilana iṣayẹwo, nipa ṣiṣe rọrun fun NGINX lati pinnu boya o jẹ MISS tabi HIT rẹ, laisi ṣayẹwo ipo lori disk.
  • aisise - ṣalaye iye akoko lẹhin eyi ti data data ti a ko wọle lakoko akoko ti a sọ tẹlẹ ti paarẹ lati ibi ipamọ laibikita alabapade wọn. Iye kan ti 60m ninu iṣeto apẹẹrẹ wa tumọ si awọn faili ti ko wọle lẹhin 60 yoo yọ kuro lati kaṣe naa.
  • max_size - ṣalaye iwọn ti o pọ julọ ti kaṣe naa. Awọn ipele diẹ sii wa ti o le lo nibi (ka iwe NGINX fun alaye diẹ sii).

Awọn oniyipada ninu itọsọna fastcgi_cache_key ti ṣapejuwe ni isalẹ.

NGINX lo wọn ni iṣiro bọtini (idanimọ) ti ibeere kan. Pataki, lati firanṣẹ esi ti o wa ni ibi si alabara, ibeere naa gbọdọ ni bọtini kanna bi idahun ti o ni kaṣe.

  • $eni - ero ibere, HTTP tabi HTTPS.
  • $request_method - ọna ibere, nigbagbogbo\"GET" tabi\"POST".
  • $ogun - eyi le jẹ orukọ orukọ ogun lati laini ibere, tabi orukọ olupin lati aaye akọle akọle ““ Alejo ”, tabi orukọ olupin ti o ba ibeere kan mu, ni aṣẹ ti iṣaaju.
  • $request_uri - tumọ si ibeere atilẹba atilẹba URI (pẹlu awọn ariyanjiyan).

Pẹlupẹlu, oniyipada $upstream_cache_status ninu add_header itọsọna X-Cache-Status ni a ṣe iṣiro fun ibeere kọọkan ti NGINX ṣe idahun si, boya o jẹ MISS (idahun ti a ko rii ni ibi ipamọ, ti o wa lati olupin ohun elo) tabi HIT kan (idahun ti a ṣiṣẹ lati kaṣe) tabi eyikeyi awọn iye atilẹyin miiran.

Nigbamii, laarin ipo itọsọna eyiti o kọja awọn ibeere PHP si PHP-FPM, nlo awọn itọsọna fastcgi_cache lati mu kaṣe ti o ṣẹṣẹ ṣalaye loke ṣiṣẹ.

Tun ṣeto akoko kaṣe fun awọn idahun oriṣiriṣi nipa lilo itọsọna fastcgi_cache_valid bi a ti han.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Ti akoko caching nikan ba ti ṣalaye bi ninu ọran wa, awọn idahun 200, 301, ati 302 nikan ni a pamọ. Ṣugbọn o tun le ṣafihan awọn idahun ni gbangba tabi lo eyikeyi (fun eyikeyi koodu idahun):

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

Ṣiṣẹ-Ṣiṣatunṣe FastCGI Caching Iṣẹ lori Nginx

Lati ṣeto nọmba ti o kere julọ ti awọn akoko ibeere pẹlu bọtini kanna ni a gbọdọ ṣe ṣaaju ki o to pamọ idahun, pẹlu itọsọna fastcgi_cache_min_uses , boya ni http {} tabi olupin {} tabi ipo {} o tọ.

fastcgi_cache_min_uses  3

Lati jeki atunse awọn ohun kaṣe ti o pari nipa lilo awọn ibeere ipo pẹlu\"If-Modified-Niwon" ati\"If-No-Match" awọn aaye akọsori, ṣafikun ilana fastcgi_cache_revalidate , laarin http {} tabi olupin {} tabi ipo {} o tọ.

fastcgi_cache_revalidate on;

O tun le kọ NGINX lati fi akoonu ti a fi pamọ si nigba ti olupin orisun tabi olupin FCGI wa ni isalẹ, ni lilo itọsọna proxy_cache_use_stale , laarin itọsọna ipo.

Iṣeto apẹẹrẹ yii tumọ si pe nigbati NGINX ba gba aṣiṣe kan, akoko ipari, ati eyikeyi awọn aṣiṣe ti a ṣalaye lati ọdọ olupin oke ati pe o ni ẹya ti o gbooro ti faili ti a beere ni akoonu ti o wa ni ibi ipamọ, o fi faili stale naa silẹ.

proxy_cache_use_stale error timeout http_500;

Itọsọna miiran ti o wulo si iṣẹ-ṣiṣe caching daradara-tunṣe FCGI ni fastcgi_cache_background_update eyiti o ṣiṣẹ ni apapo pẹlu proxy_cache_use_stale itọsọna. Nigbati o ba ṣeto si, o nkọ NGINX lati sin akoonu ti o gboju nigbati awọn alabara beere fun faili kan ti o pari tabi ti o wa ninu ilana ti imudojuiwọn lati ọdọ olupin oke.

fastcgi_cache_background_update on;

fastcgi_cache_lock wulo paapaa, fun ṣiṣe atunṣe kaṣe-yiyi ni pe ti awọn alabara pupọ ba beere fun akoonu kanna ti ko si ni kaṣe, NGINX yoo siwaju ibeere akọkọ nikan si olupin oke, kaṣe awọn idahun lẹhinna sin awọn ibeere alabara miiran lati kaṣe.

fastcgi_cache_lock on;

Lẹhin ṣiṣe gbogbo awọn ayipada ti o wa loke ninu faili iṣeto NGINX, fipamọ ati pa a. Lẹhinna ṣayẹwo iṣeto iṣeto fun eyikeyi awọn aṣiṣe sintasi ṣaaju tun bẹrẹ iṣẹ NGINX.

# nginx -t
# systemctl restart nginx

Nigbamii, ṣe idanwo ti kaṣe naa ba n ṣiṣẹ daradara, gbiyanju lati wọle si ohun elo wẹẹbu rẹ tabi aaye lati lilo pipaṣẹ curl atẹle (akoko akọkọ yẹ ki o tọka si MISS kan, ṣugbọn awọn ibeere atẹle yoo yẹ ki o tọka HIT bi o ṣe han ninu sikirinifoto).

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

Eyi ni sikirinifoto miiran ti n fihan NGINX iṣẹ data ti o ti gun.

Fifi Awọn imukuro si Fori Kaṣe

O ṣee ṣe lati ṣeto awọn ipo labẹ eyiti NGINX ko yẹ ki o firanṣẹ awọn idahun ti a fi pamọ si awọn alabara, ni lilo ilana fastcgi_cache_bypass . Ati lati kọ NGINX lati maṣe ṣe awọn idahun kaṣe lati ọdọ olupin oke rara, lo fastcgi_no_cache .

Fun apẹẹrẹ, ti o ba fẹ awọn ibeere POST ati awọn URL pẹlu okun ibeere lati lọ nigbagbogbo si PHP. Ni akọkọ, ṣafihan alaye ti o ba jẹ lati ṣeto ipo naa gẹgẹbi atẹle.

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

Lẹhinna mu iyasọtọ ti o wa loke ṣiṣẹ ni ipo itọsọna eyiti o gba awọn ibeere PHP si PHP-FPM, ni lilo awọn fastcgi_cache_bypass ati fastcgi_no_cache awọn itọsọna.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Ọpọlọpọ awọn ẹya miiran ti aaye rẹ wa fun eyiti o le ma fẹ lati mu kaṣe akoonu ṣiṣẹ. Atẹle yii jẹ apẹẹrẹ iṣeto NGINX fun imudarasi iṣẹ ti aaye Wodupiresi kan, ti a pese lori bulọọgi nginx.com.

Lati lo, ṣe awọn ayipada (bii ibugbe, awọn ọna, awọn orukọ orukọ, ati bẹbẹ lọ) lati ṣe afihan ohun ti o wa ni agbegbe rẹ.

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

Muu Kaṣe Aṣoju ṣiṣẹ ni NGINX

NGINX tun ṣe atilẹyin caching ti awọn idahun lati ọdọ awọn olupin ti o ni ibatan miiran (ti asọye nipasẹ itọsọna proxy_pass ). Fun ọran idanwo yii, a nlo NGINX bi aṣoju iyipada fun ohun elo wẹẹbu Node.js, nitorinaa a yoo mu NGINX ṣiṣẹ bi ibi ipamọ fun ohun elo Node.js. Gbogbo awọn itọsọna iṣeto ti a lo nibi ni awọn itumọ kanna bi awọn itọsọna FastCGI ni apakan ti tẹlẹ, nitorinaa a kii yoo ṣalaye wọn lẹẹkansii.

Lati jẹki caching awọn idahun lati ọdọ olupin proxied kan, pẹlu itọsọna proxy_cache_path itọsọna ni ipele oke- http {} ti o tọ. Lati ṣọkasi bawo ni a ṣe fi awọn ibeere pamọ, o tun le ṣafikun ilana proxy_cache_key gẹgẹbi atẹle.

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;

Nigbamii, mu kaṣe ṣiṣẹ ninu itọsọna ipo.

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

Lati ṣalaye awọn ipo labẹ eyiti NGINX ko firanṣẹ akoonu ti a fi pamọ ati pe ko ṣe kaṣe idahun rara lati ọdọ olupin oke, pẹlu proxy_cache_bypass ati proxy_no_cache .

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

Iṣẹ Iṣe Kaṣe Aṣatunṣe-Tuning

Awọn itọsọna wọnyi wulo fun ṣiṣatunṣe iṣẹ ti kaṣe aṣoju. Wọn tun ni awọn itumọ kanna bi awọn itọsọna 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;

Fun alaye diẹ sii ati awọn itọsọna iṣeto ni fifipamọ, wo awọn iwe fun awọn modulu akọkọ meji ngx_http_proxy_module.

Awọn orisun Afikun: Awọn imọran fun Imudarasi Ipele Wodupiresi.