Kā kešot saturu NGINX


NGINX ir konsolidēts atvērtā koda, augstas veiktspējas tīmekļa serveris, kas paātrina satura un lietojumprogrammu piegādi, uzlabo drošību un uzlabo mērogojamību. Viens no visizplatītākajiem Nginx lietošanas gadījumiem ir satura kešatmiņa, kas ir visefektīvākais veids, kā uzlabot vietnes veiktspēju.

Varat izmantot NGINX, lai paātrinātu vietējās izcelsmes serverus, konfigurējot to, lai kešatmiņā saglabātu atbildes no augšupējiem serveriem, kā arī lai izveidotu servera serverus satura piegādes tīkliem (CDN). NGINX nodrošina dažu lielāko CDN darbību.

Konfigurējot kā kešatmiņu, NGINX:

  • statisko un dinamisko saturu kešatmiņā.
  • uzlabojiet dinamiskā satura veiktspēju, izmantojot kešatmiņu.
  • kalpot novecojušam saturam, atkārtoti pārbaudot fonā, lai sniegtu labāku sniegumu.
  • ignorēt vai iestatīt kešatmiņas vadības galvenes un daudz ko citu.

Šajā rakstā jūs uzzināsiet, kā konfigurēt NGINX kā satura kešatmiņu Linux, lai jūsu tīmekļa serveri darbotos pēc iespējas efektīvāk.

Linux serverī jābūt instalētam NGINX, ja ne, izpildiet šīs rokasgrāmatas, lai instalētu Nginx:

  • Kā instalēt Nginx CentOS 8
  • Kā instalēt Nginx CentOS 7

Statiskais kešatmiņas saturs vietnē Nginx

Statiskais saturs ir vietnes saturs, kas dažādās lapās paliek nemainīgs (nemainās). Statiskā satura piemēri ir tādi faili kā attēli, video, dokumenti; CSS un JavaScript faili.

Ja jūsu vietne izmanto daudz statiska satura, varat optimizēt tā veiktspēju, iespējojot klienta puses kešatmiņu, kur pārlūkprogramma saglabā statiskā satura kopijas, lai ātrāk piekļūtu.

Šī konfigurācijas parauga pārbaude ir piemērota, vienkārši nomainiet www.example.com ar savas vietnes nosaukuma URL un pēc vajadzības veiciet izmaiņas citu ceļu nosaukumos.

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

Kešatmiņas dinamiskais saturs vietnē Nginx

NGINX izmanto pastāvīgu uz diska balstītu kešatmiņu, kas atrodas kaut kur vietējā failu sistēmā. Tāpēc vispirms izveidojiet vietējā diska direktoriju kešatmiņā saglabātā satura glabāšanai.
# mkdir -p/var/cache/nginx

Pēc tam kešatmiņas direktorijā iestatiet atbilstošās īpašumtiesības. Tam vajadzētu būt NGINX lietotāja (nginx) un grupas (nginx) īpašniekam šādi.

# chown nginx:nginx /var/cache/nginx

Tagad turpiniet tālāk, lai redzētu, kā iespējot dinamisko saturu Nginx zemāk esošajā sadaļā.

FastCGI kešatmiņas iespējošana NGINX

FastCGI (vai FCGI) ir plaši izmantots protokols interaktīvu lietojumprogrammu, piemēram, PHP, mijiedarbībai ar tīmekļa serveriem, piemēram, NGINX. Tas ir CGI (Common Gateway Interface) paplašinājums.

FCGI galvenā priekšrocība ir tā, ka tā vienā procesā pārvalda vairākus CGI pieprasījumus. Bez tā tīmekļa serverim ir jāatver jauns process (kas jākontrolē, jāapstrādā pieprasījums un jāaizver) katram klienta pieprasījumam pēc pakalpojuma.

Lai apstrādātu PHP skriptus LEMP kaudzes izvietojumā, NGINX izmanto FPM (FastCGI procesu pārvaldnieku) vai PHP-FPM, kas ir populāra alternatīva PHP FastCGI ieviešana. Kad PHP-FPM process ir palaists, NGINX ir konfigurēts tā starpniekservera pieprasījumiem apstrādei. Tādējādi NGINX var arī konfigurēt, lai kešatmiņā saglabātu atbildes no PHP-FPM aizmugures lietojumprogrammu servera.

Sadaļā NGINX FastCGI satura kešatmiņa tiek deklarēta, izmantojot direktīvu ar nosaukumu fastcgi_cache_path augstākā līmeņa http {} kontekstā, NGINX konfigurācijas struktūrā. Varat arī pievienot fastcgi_cache_key , kas nosaka kešatmiņas atslēgu (pieprasījuma identifikatoru).

Turklāt, lai nolasītu augšējā posma kešatmiņas statusu, kontekstā http {} pievienojiet direktīvu add_header X-Cache-Status - tas ir noderīgi atkļūdošanas nolūkos.

Pieņemot, ka jūsu vietnes servera bloka konfigurācijas fails atrodas vietnē /etc/nginx/conf.d/testapp.conf vai /etc/nginx/sites-available/testapp.conf (zem Ubuntu un tā atvasinājumiem), atveriet rediģēšanas failu un pievienojiet faila augšdaļā šādas rindas.

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;

Direktīva fastcgi_cache_path norāda šādu parametru skaitu:

  • /var/cache/nginx - ceļš uz kešatmiņas vietējā diska direktoriju.
  • līmeņi - nosaka kešatmiņas hierarhijas līmeņus, tā izveido divu līmeņu direktoriju hierarhiju zem/var/cache/nginx.
  • keys_zone (nosaukums: izmērs) - ļauj izveidot koplietojamas atmiņas zonu, kurā tiek saglabāti visi aktīvie taustiņi un informācija par datiem (meta). Ņemiet vērā, ka atslēgu saglabāšana atmiņā paātrina pārbaudes procesu, padarot NGINX vieglāk noteikt, vai tā ir MISS vai HIT, nepārbaudot statusu diskā.
  • neaktīvs - norāda laiku, pēc kura kešatmiņā saglabātie dati, kuriem nav piekļuves norādītajā laikā, tiek izdzēsti no kešatmiņas neatkarīgi no to svaiguma. Mūsu piemēru konfigurācijā vērtība 60 m nozīmē, ka faili, kuriem nav piekļūts pēc 60 gadiem, tiks noņemti no kešatmiņas.
  • max_size - norāda kešatmiņas maksimālo lielumu. Šeit ir vairāk parametru, kurus varat izmantot (plašāku informāciju lasiet NGINX dokumentācijā).

Mainīgie direktīvā fastcgi_cache_key ir aprakstīti tālāk.

NGINX tos izmanto, aprēķinot pieprasījuma atslēgu (identifikatoru). Svarīgi ir tas, ka, lai klientam nosūtītu kešatmiņā saglabātu atbildi, pieprasījumam ir jābūt tai pašai atslēgai kā kešatmiņā ievietotai atbildei.

  • $shēma - pieprasījumu shēma, HTTP vai HTTPS.
  • $request_method - pieprasījuma metode, parasti “GET” vai “POST”.
  • $resursdators - tas var būt resursdatora nosaukums no pieprasījuma rindas vai resursdatora nosaukums laukā “Host” pieprasījuma galvene, vai servera nosaukums, kas atbilst pieprasījumam prioritārā secībā.
  • $request_uri - pilns sākotnējā pieprasījuma URI (ar argumentiem).

Turklāt direktīvā add_header X-Cache-Status mainīgais $upstream_cache_status tiek aprēķināts katram pieprasījumam, uz kuru NGINX atbild, neatkarīgi no tā, vai tas ir MISS (atbilde nav atrodama kešatmiņā, saņemta no lietojumprogrammas servera). vai HIT (atbilde tiek piegādāta no kešatmiņas) vai jebkura cita atbalstītā vērtība.

Pēc tam direktīvā location , kas PHP pieprasījumus nodod PHP-FPM, izmanto fastcgi_cache direktīvas, lai aktivizētu tikko definēto kešatmiņu.

Iestatiet arī kešatmiņas laiku dažādām atbildēm, izmantojot fastcgi_cache_valid direktīvu, kā parādīts.

fastcgi_cache CACHEZONE;
fastcgi_cache_valid  60m;

Ja tiek norādīts tikai kešatmiņas laiks, kā tas ir mūsu gadījumā, kešatmiņā tiek saglabātas tikai 200, 301 un 302 atbildes. Bet jūs varat arī precīzi norādīt atbildes vai izmantot jebkuru (jebkuram atbildes kodam):

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

FastCGI kešatmiņas veiktspējas uzlabošana Nginx

Lai iestatītu minimālo reižu pieprasījuma skaitu ar to pašu atslēgu, pirms atbilde tiek saglabāta kešatmiņā, iekļaujiet direktīvu fastcgi_cache_min_uses_code> vai nu http {} vai servera {} vai atrašanās vietas {} konteksts.

fastcgi_cache_min_uses  3

Lai iespējotu kešatmiņas vienumu, kuru derīguma termiņš ir beidzies, atkārtotu validāciju, izmantojot nosacījuma pieprasījumus ar galvenes laukiem “If-Modified-Since” un “If-None-Match”, pievienojiet fastcgi_cache_revalidate direktīvu http {} vai serveris {} vai location {} konteksts.

fastcgi_cache_revalidate on;

Varat arī uzdot NGINX piegādāt kešatmiņā saglabātu saturu, kad izcelsmes serveris vai FCGI serveris nedarbojas, izmantojot atrašanās vietas direktīvu, izmantojot direktīvu proxy_cache_use_stale .

Šī konfigurācijas parauga nozīme ir tāda, ka tad, kad NGINX saņem kļūdu, taimautu un jebkuru no norādītajām kļūdām no augšpusējā servera un kešatmiņā esošajā saturā ir novecojusi pieprasītā faila versija, tā piegādā novecojušo failu.

proxy_cache_use_stale error timeout http_500;

Vēl viena noderīga direktīva FCGI kešatmiņas veiktspējas precizēšanai ir fastcgi_cache_background_update , kas darbojas kopā ar direktīvu proxy_cache_use_stale . Ja tas ir ieslēgts, tas uzdod NGINX apkalpot novecojušu saturu, kad klienti pieprasa failu, kura derīguma termiņš ir beidzies vai kuru atjaunināšanas process no augšteces servera prasa.

fastcgi_cache_background_update on;

fastcgi_cache_lock ir noderīgs arī kešatmiņas veiktspējas precizēšanai, jo, ja vairāki klienti pieprasa to pašu saturu, kura nav kešatmiņā, NGINX pārsūtīs augšupielādes serverim tikai pirmo pieprasījumu, atbilde pēc tam apkalpo pārējos klienta pieprasījumus no kešatmiņas.

fastcgi_cache_lock on;

Pēc visu iepriekšminēto izmaiņu veikšanas NGINX konfigurācijas failā saglabājiet un aizveriet to. Pēc tam pirms restartējiet pakalpojumu NGINX, pārbaudiet, vai konfigurācijas struktūrā nav sintakses kļūdu.

# nginx -t
# systemctl restart nginx

Pēc tam pārbaudiet, vai kešatmiņa darbojas pareizi, mēģiniet piekļūt savai tīmekļa lietojumprogrammai vai vietnei, izmantojot šādu čokurošanās komandu (pirmajā reizē jānorāda MISS, bet nākamajos pieprasījumos jānorāda HIT, kā parādīts ekrānuzņēmumā).

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

Šeit ir vēl viens ekrānuzņēmums, kurā parādīti NGINX, kas apkalpo novecojušus datus.

Izņēmumu pievienošana kešatmiņai

Izmantojot fastcgi_cache_bypass direktīvu, ir iespējams iestatīt nosacījumus, saskaņā ar kuriem NGINX nevajadzētu nosūtīt kešatmiņā saglabātas atbildes klientiem. Un, lai norādītu NGINX vispār nenoturēt kešatmiņā atbildes no augšpusējā servera, izmantojiet fastcgi_no_cache .

Piemēram, ja vēlaties, lai POST pieprasījumi un URL ar vaicājuma virkni vienmēr nonāktu PHP. Vispirms paziņojiet if paziņojumu, lai nosacījumu iestatītu šādi.

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

Pēc tam aktivizējiet iepriekš minēto izņēmumu direktīvā location , kas nodod PHP pieprasījumus PHP-FPM, izmantojot fastcgi_cache_bypass un fastcgi_no_cache direktīvas.

 
fastcgi_cache_bypass $skip_cache; 
fastcgi_no_cache $skip_cache;

Ir daudz citu jūsu vietnes daļu, kurās jūs, iespējams, nevēlaties iespējot satura kešošanu. Šis ir NGINX konfigurācijas piemērs WordPress vietnes veiktspējas uzlabošanai, kas sniegts emuārā nginx.com.

Lai to izmantotu, veiciet izmaiņas (piemēram, domēnu, ceļus, failu nosaukumus utt.), Lai atspoguļotu to, kas pastāv jūsu vidē.

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

Starpniekservera kešatmiņas iespējošana NGINX

NGINX atbalsta arī atbilžu kešatmiņu no citiem starpniekserveriem (definēts ar proxy_pass direktīvu). Šajā testa gadījumā mēs izmantojam NGINX kā atgriezenisko starpniekserveri Node.js tīmekļa lietojumprogrammai, tāpēc mēs iespējosim NGINX kā kešatmiņu lietojumprogrammai Node.js. Visām šeit izmantotajām konfigurācijas direktīvām ir līdzīga nozīme kā FastCGI direktīvām iepriekšējā sadaļā, tāpēc mēs tās vairs nepaskaidrosim.

Lai iespējotu atbilžu kešatmiņu no starpniekservera, iekļaujiet proxy_cache_path direktīvu augstākā līmeņa http {} kontekstā. Lai norādītu, kā pieprasījumi tiek saglabāti kešatmiņā, varat arī pievienot direktīvu proxy_cache_key šādi.

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;

Pēc tam aktivizējiet kešatmiņu atrašanās vietas direktīvā.

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

Lai definētu apstākļus, kādos NGINX nesūta kešatmiņā saglabātu saturu un vispār nesaglabā atbildi no augšpusējā servera, iekļaujiet proxy_cache_bypass un proxy_no_cache .

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

Starpniekservera kešatmiņas veiktspējas precizēšana

Tālāk norādītās direktīvas ir noderīgas, lai precīzi pielāgotu starpniekservera kešatmiņas veiktspēju. Viņiem ir arī tādas pašas nozīmes kā FastCGI direktīvām.

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;

Lai iegūtu papildinformāciju un kešatmiņas konfigurēšanas direktīvas, skatiet divu galveno moduļu ngx_http_proxy_module dokumentāciju.

Papildu resursi: padomi WordPress veiktspējas uzlabošanai.


Visas tiesības aizsargātas. © Linux-Console.net • 2019-2024