Come memorizzare nella cache i contenuti in NGINX

NGINX essendo un server Web open source consolidato e ad alte prestazioni che velocizza la distribuzione di contenuti e applicazioni, migliora la sicurezza e migliora la scalabilità. Uno dei casi d'uso più comuni di Nginx è un Cache dei contenuti, che è il modo più efficace per aumentare le prestazioni di un sito web.

Leggi anche: I 10 migliori strumenti di memorizzazione nella cache open source per Linux

Puoi usare NGINX per accelerare i server di origine locale configurandolo per memorizzare nella cache le risposte dai server upstream e anche per creare server edge per reti di distribuzione dei contenuti (CDN). NGINX alimenta alcuni dei più grandi CDN.

Quando configurato come cache, NGINX:

  • cache di contenuti statici e dinamici.
  • migliorare le prestazioni dei contenuti dinamici con il micro-caching.
  • servire contenuti obsoleti durante la riconvalida in background per prestazioni migliori.
  • sovrascrivere o impostare le intestazioni Cache-Control e altro.

In questo articolo imparerai come configurare NGINX come un Cache dei contenuti in Linux per far funzionare i tuoi server web nel modo più efficiente possibile.

Prerequisiti:

Avresti dovuto NGINX installato sul tuo server Linux, in caso contrario segui queste guide per installare Nginx:

  • Come installare Nginx su CentOS 8
  • Come installare Nginx su CentOS 7

Contenuto statico della cache su Nginx

Il contenuto statico è il contenuto di un sito Web che rimane lo stesso (non cambia) tra le pagine. Esempi di contenuto statico includono file come immagini, video, documenti; File CSS e file JavaScript.

Se il tuo sito Web utilizza molti contenuti statici, puoi ottimizzarne le prestazioni abilitando la memorizzazione nella cache lato client in cui il browser memorizza copie di contenuto statico per un accesso più rapido.

La seguente configurazione di esempio è una buona idea, basta sostituire www.esempio.com con l'URL del nome del tuo sito web e apportare modifiche ad altri nomi di percorso a seconda dei casi.

server { # sostituisci l'URL del tuo server web con www.example.com nome_server www.esempio.com; radice /var/www/esempio.com/htdocs; indice index.php; access_log /var/log/nginx/esempio.com.log.accesso; log_errore /var/log/nginx/esempio.com.log.errori; posizione / { try_files $uri $uri/ /index.php?$args; } posizione ~ .php$ { try_files $uri =404; includi fastcgi_params; # sostituisci il socket, o indirizzo e porta, del tuo server WordPress fastcgi_pass unix:/var/run/php5-fpm.sock; #fastcgi_pass 127.0.0.1:9000; } posizione ~* .(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)$ { scade max; log_not_found disattivato; access_log off; } }

Contenuto dinamico della cache su Nginx

NGINX utilizza una cache permanente basata su disco situata da qualche parte nel file system locale. Quindi inizia creando la directory del disco locale per l'archiviazione del contenuto memorizzato nella cache.
# mkdir -p /var/cache/nginx

Quindi, imposta la proprietà appropriata nella directory della cache. Dovrebbe essere di proprietà del NGINX utente (nginx) e gruppo (nginx) come segue.

# chown nginx: nginx /var/cache/nginx. 

Ora procedi ulteriormente per vedere come abilitare il contenuto dinamico su Nginx nella sezione sottostante.

Abilitazione della cache FastCGI in NGINX

FastCGI (o FCGI) è un protocollo ampiamente utilizzato per interfacciare applicazioni interattive come PHP con server web come NGINX. È un'estensione del CGI (Interfaccia gateway comune).

Il vantaggio principale di FCGI è che gestisce più richieste CGI in un unico processo. Senza di esso, il server web deve aprire un nuovo processo (che deve essere controllato, elaborare una richiesta e chiudersi) per ogni richiesta del client per un servizio.

Processare PHP script in a Distribuzione dello stack LEMP, NGINX usa FPM (FastCGI Process Manager) o PHP-FPM, una popolare implementazione PHP FastCGI alternativa. una volta che PHP-FPM il processo è in esecuzione, NGINX è configurato per inoltrare richieste ad esso per l'elaborazione. Pertanto NGINX può anche essere configurato per memorizzare nella cache le risposte dal PHP-FPM server delle applicazioni di backend.

Sotto NGINX, il FastCGI la cache dei contenuti è dichiarata usando una direttiva chiamata fastcgi_cache_path nel livello più alto http{} contesto, all'interno della struttura di configurazione di NGINX. Puoi anche aggiungere il fastcgi_cache_key che definisce una chiave (identificatore di richiesta) per la memorizzazione nella cache.

Inoltre, per leggere lo stato della cache upstream, aggiungi il add_header X-Cache-Status direttiva all'interno del http{} contesto – questo è utile per scopi di debug.

Supponendo che il file di configurazione del blocco del server del tuo sito si trovi in /etc/nginx/conf.d/testapp.conf o /etc/nginx/sites-available/testapp.conf (sotto Ubuntu e suoi derivati), apri il file di modifica e aggiungi le seguenti righe nella parte superiore del file.

fastcgi_cache_path /var/cache/nginx level=1:2 keys_zone=CACHEZONE: 10m; inattivo=60m max_size=40m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; add_header X-Cache $upstream_cache_status; 
Abilita FastCGI Cache in NGINX
Abilita FastCGI Cache in NGINX

Il fastcgi_cache_path direttiva specifica il numero di parametri che sono:

  • /var/cache/nginx – il percorso della directory del disco locale per la cache.
  • livelli – definisce i livelli gerarchici di una cache, imposta una gerarchia di directory a due livelli sotto /var/cache/nginx.
  • keys_zone (nome: dimensione) – consente la creazione di una zona di memoria condivisa in cui sono archiviate tutte le chiavi attive e le informazioni sui dati (meta). Si noti che la memorizzazione delle chiavi in ​​memoria accelera il processo di verifica, rendendo più semplice per NGINX determinare se è a PERDERE o COLPIRE, senza controllare lo stato su disco.
  • non attivo – specifica la quantità di tempo dopo la quale i dati memorizzati nella cache a cui non si accede durante il tempo specificato vengono eliminati dalla cache indipendentemente dal loro aggiornamento. Un valore di 60 m nella nostra configurazione di esempio significa che i file a cui non si accede dopo 60 verranno rimossi dalla cache.
  • dimensione_massima – specifica la dimensione massima della cache. Ci sono più parametri che puoi usare qui (leggi la documentazione di NGINX per maggiori informazioni).

Le variabili in fastcgi_cache_key direttiva è descritta di seguito.

NGINX li utilizza per calcolare la chiave (identificatore) di una richiesta. È importante sottolineare che per inviare una risposta memorizzata nella cache al client, la richiesta deve avere la stessa chiave di una risposta memorizzata nella cache.

  • $schema – schema di richiesta, HTTP o HTTPS.
  • $request_method – modalità di richiesta, solitamente “OTTENERE" o "INVIARE”.
  • $host – questo può essere il nome host dalla riga di richiesta o il nome host dal "Ospite” campo dell'intestazione della richiesta, o il nome del server che corrisponde a una richiesta, in ordine di precedenza.
  • $request_uri – significa l'intero URI della richiesta originale (con argomenti).

Anche il $upstream_cache_status variabile in add_header X-Cache-Status viene calcolata per ogni richiesta a cui NGINX risponde, indipendentemente dal fatto che si tratti di una PERDERE (risposta non trovata nella cache, ottenuta dal server delle applicazioni) o a COLPIRE (risposta fornita dalla cache) o uno qualsiasi degli altri valori supportati.

Successivamente, all'interno del Posizione direttiva che passa le richieste PHP a PHP-FPM, usa il fastcgi_cache direttive per attivare la cache che hai appena definito sopra.

Imposta anche il tempo di memorizzazione nella cache per risposte diverse usando il fastcgi_cache_valid direttiva come mostrato.

fastcgi_cache CACHEZONE; fastcgi_cache_valid 60m; 
Definisci zona e ora di memorizzazione nella cache
Definisci zona e ora di memorizzazione nella cache

Se viene specificato solo il tempo di memorizzazione nella cache come nel nostro caso, solo 200, 301, e 302 le risposte vengono memorizzate nella cache. Ma puoi anche specificare le risposte in modo esplicito o utilizzare any (per qualsiasi codice di risposta):

fastcgi_cache CACHEZONE; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; O. fastcgi_cache CACHEZONE; fastcgi_cache_valid qualsiasi 10m; 

Ottimizzazione delle prestazioni di cache FastCGI su Nginx

Per impostare il numero minimo di volte in cui deve essere effettuata una richiesta con la stessa chiave prima che la risposta venga memorizzata nella cache, includere il fastcgi_cache_min_uses direttiva, sia nel http{} o server{} o Posizione{} contesto.

fastcgi_cache_min_uses 3. 
Imposta l'utilizzo minimo della cache
Imposta l'utilizzo minimo della cache

Per abilitare la riconvalida degli elementi della cache scaduti utilizzando le richieste condizionali con il "Se-Modificato-da" e "Se-nessuno-match" campi di intestazione, aggiungi il fastcgi_cache_revalidate direttiva, all'interno della http{} o server{} o Posizione{} contesto.

fastcgi_cache_revalidate attivato; 
Imposta la riconvalida della cache
Imposta la riconvalida della cache

Puoi anche istruire NGINX per fornire contenuto memorizzato nella cache quando il server di origine o il server FCGI non è attivo, utilizzando il proxy_cache_use_stale direttiva, all'interno della direttiva location.

Questa configurazione di esempio significa che quando NGINX riceve un errore, un timeout e uno qualsiasi degli errori specificati dal server upstream e ha una versione non aggiornata del file richiesto nel contenuto memorizzato nella cache, consegna il file non aggiornato.

timeout errore proxy_cache_use_stale http_500; 
Abilita la pubblicazione di dati obsoleti
Abilita la pubblicazione di dati obsoleti

Un'altra utile direttiva per ottimizzare le prestazioni di memorizzazione nella cache FCGI è fastcgi_cache_background_update che funziona in combinazione con il proxy_cache_use_stale direttiva. Quando è attivato, indica a NGINX di servire contenuto non aggiornato quando i client richiedono un file scaduto o in fase di aggiornamento dal server upstream.

fastcgi_cache_background_update attivato; 
Abilita aggiornamento cache in background
Abilita aggiornamento cache in background

Il fastcgi_cache_lock è utile anche per la messa a punto delle prestazioni della cache in quanto se più client richiedono lo stesso contenuto che non è nella cache, NGINX inoltrerà solo la prima richiesta al server upstream, memorizzerà nella cache la risposta quindi servirà le altre richieste client dal cache.

fastcgi_cache_lock attivato; 
Abilita blocco cache
Abilita blocco cache

Dopo aver apportato tutte le modifiche di cui sopra in NGINX file di configurazione, salvarlo e chiuderlo. Quindi controllare la struttura di configurazione per eventuali errori di sintassi prima di riavviare il servizio NGINX.

# nginx -t. # systemctl riavvia nginx. 
Controlla e avvia il servizio Nginx
Controlla e avvia il servizio Nginx

Quindi, verifica se la cache funziona correttamente, prova ad accedere alla tua applicazione web o al tuo sito utilizzando quanto segue comando curl (la prima volta dovrebbe indicare a PERDERE, ma le successive richieste dovranno indicare a COLPIRE come mostrato nello screenshot).

# curl -I http://testapp.tecmint.com. 
Prova la cache FastCGI
Prova la cache FastCGI

Ecco un altro screenshot che mostra NGINX che fornisce dati obsoleti.

Prova Nginx che serve dati obsoleti
Prova Nginx che serve dati obsoleti

Aggiunta di eccezioni a Ignora cache

È possibile impostare le condizioni in base alle quali NGINX non dovrebbe inviare risposte memorizzate nella cache ai client, utilizzando il fastcgi_cache_bypass direttiva. E per istruire NGINX a non memorizzare nella cache le risposte dal server upstream, usa il fastcgi_no_cache.

Ad esempio, se vuoi INVIARE richieste e URL con una stringa di query per andare sempre a PHP. Innanzitutto, dichiarare un'istruzione if per impostare la condizione come segue.

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

Quindi attivare l'eccezione di cui sopra nel Posizione direttiva che passa le richieste PHP a PHP-FPM, usando il fastcgi_cache_bypass e fastcgi_no_cache direttive.

 fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; 

Ci sono molte altre parti del tuo sito per le quali potresti non voler abilitare la memorizzazione nella cache dei contenuti. Quello che segue è un esempio di configurazione NGINX per migliorare le prestazioni di un sito WordPress, fornito su nginx.com blog.

Per usarlo, apporta modifiche (come il dominio, i percorsi, i nomi dei file, ecc.) per riflettere ciò che esiste nel tuo ambiente.

fastcgi_cache_path /var/run/NGINX-cache level=1:2 keys_zone=WORDPRESS: 100m inattivo=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { nome_server esempio.com www.esempio.com; root /var/www/esempio.com; indice index.php; access_log /var/log/NGINX/example.com.access.log; error_log /var/log/NGINX/example.com.error.log; imposta $skip_cache 0; # Le richieste POST e gli URL con una stringa di query dovrebbero sempre andare a PHP if ($request_method = POST) { set $skip_cache 1; } if ($query_string != "") { set $skip_cache 1; } # Non memorizza nella cache gli URI contenenti i seguenti segmenti if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php |sitemap (_index)?. xml") { set $skip_cache 1; } # Non usa la cache per gli utenti che hanno effettuato l'accesso o per i commentatori recenti if ($http_cookie ~* "autore_commento|wordpress_[a-f0-9]+|wp-postpass |wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1; } posizione / { try_files $uri $uri/ /index.php?$args; } posizione ~ .php$ { try_files $uri /index.php; includi 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"; } posizione ~* ^.+.(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 disattivato; scade al massimo; } location = /robots.txt { access_log off; log_not_found disattivato; } posizione ~ /. { negare tutto; access_log off; log_not_found disattivato; } }

Abilitazione della cache proxy in NGINX

NGINX supporta anche la memorizzazione nella cache delle risposte da altri server proxy (definiti dal proxy_pass direttiva). Per questo test case, stiamo usando NGINX come proxy inverso per un'applicazione web Node.js, quindi abiliteremo NGINX come cache per l'applicazione Node.js. Tutte le direttive di configurazione usate qui hanno significati simili alle direttive FastCGI nella sezione precedente, quindi non le spiegheremo di nuovo.

Per abilitare la memorizzazione nella cache delle risposte da un server proxy, includere il proxy_cache_path direttiva al livello più alto http{} contesto. Per specificare come le richieste vengono memorizzate nella cache, puoi anche aggiungere il proxy_cache_key direttiva come segue.

proxy_cache_path /var/cache/nginx app1 keys_zone=PROXYCACHE: 100m inattivo=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; 

Quindi, attiva la cache nella direttiva location.

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

Per definire le condizioni in base alle quali NGINX non invia contenuto memorizzato nella cache e non memorizza nella cache alcuna risposta dal server a monte, includere il proxy_cache_bypass e proxy_no_cache.

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

Ottimizzazione delle prestazioni della cache proxy

Le seguenti direttive sono utili per ottimizzare le prestazioni della cache del proxy. Hanno anche gli stessi significati delle direttive FastCGI.

proxy_cache_min_uses 3; proxy_cache_revalidate attivato; proxy_cache_use_stale errore timeout aggiornamento http_500; proxy_cache_background_update attivato; proxy_cache_lock attivato; 

Per ulteriori informazioni e direttive di configurazione della cache, vedere la documentazione per i due moduli principali ngx_http_fastcgi_module e ngx_http_proxy_module.

Risorse addizionali: NGINX Cache dei contenuti e Suggerimenti per migliorare le prestazioni di WordPress.

Teachs.ru