Ottimizzazione di Nginx con memorizzazione nella cache

Nginx è un potente software di applicazione web con cui ospitare siti web. Nel tempo, Nginx ha finalmente superato Apache nel software per server Web più utilizzato dopo il suo lancio nei primi anni 2000, principalmente grazie alle prestazioni e alla capacità di essere più di un server Web tradizionale. Una delle tante cose per cui viene utilizzato Nginx è la distribuzione come proxy inverso o bilanciatore del carico.

Tuttavia, una caratteristica chiave viene persa la maggior parte delle volte quando viene distribuita come front-end per i server back-end. Questa è la capacità che Nginx ha su HAProxy nel catturare risorse statiche in modo relativamente facile con la scrittura su disco o se si dispone di un server robusto con una discreta abbondanza di RAM che aggiunge la cache alla memoria per le massime prestazioni.

Nel seguente tutorial, vedrai alcuni esempi di come farlo, dando immediatamente una spinta al tuo server Nginx se usi Nginx in una situazione di proxy inverso.

Prerequisiti

  • Sistema operativo consigliato: Qualsiasi sistema operativo Linux con Nginx installato.
  • Account utente: Un account utente con accesso sudo o root.

pubblicità


Crea cache Nginx (cache disco tradizionale)

Nel primo esempio, creerai una directory e aggiungerai una zona al tuo blocco server Nginx con i tradizionali file statici di memorizzazione nella cache su un disco. A lungo termine, se non si utilizza un SSD, questo a volte può essere un fattore negativo. Inoltre, anche con SSD, la scrittura costante può ridurre l'aspettativa di vita a seconda dell'età e della qualità del disco rigido.

Innanzitutto, crea la directory per memorizzare i dati della cache:

sudo mkdir -p /cache/tmpfs/

Quindi, aggiungi quanto segue al blocco del tuo server, modifica il blocco del server proxy esistente e aggiungi gli extra.

proxy_cache_path /cache/nginx/tmpfs levels=1:2 keys_zone=my_zone:100m max_size=6g inactive=1d use_temp_path=off;

server {
    ...
    location / {
        proxy_cache my_zone;
        proxy_cache_key $scheme$request_method$proxy_host$request_uri;
        proxy_cache_valid 404 302 1m;
        proxy_cache_valid 200 1d;
        proxy_http_version   1.1;
        add_header X-Cache-Status $upstream_cache_status;
    }
    ...
}

Nota, assicurati che (proxy_cache_path) vada nella parte HTTP e non nel blocco del server. Inoltre, i percorsi dei file devono essere assoluti, altrimenti non funzionerà. Nel complesso, la guida rimuove i file non toccati per 24 ore e la convalida della cache per 24 ore prima di essere aggiornata.

Ecco una ripartizione della terminologia Nginx.

  • keys_zone: imposta una zona di memoria condivisa per l'archiviazione delle chiavi della cache e dei metadati come i timer di utilizzo. Avere una copia delle chiavi in ​​memoria consente a NGINX di determinare rapidamente se una richiesta è (COLPIRE) o (PERDERE) senza dover andare su disco, velocizzando notevolmente il controllo. Un'area da 1 MB può archiviare dati per circa 8,000 chiavi, quindi l'area da 10 MB configurata nell'esempio può archiviare dati per circa 80,000 chiavi.
  • inattivo: specifica per quanto tempo un elemento può rimanere nella cache senza essere accessibile. In questo esempio, un file che non è stato richiesto per 60 minuti viene automaticamente eliminato dalla cache dal processo di gestione della cache, indipendentemente dal fatto che sia scaduto o meno. Il valore predefinito è 10 minuti (10m). Il contenuto inattivo è diverso dal contenuto scaduto. NGINX non elimina automaticamente il contenuto scaduto come definito da un'intestazione di controllo della cache (Cache-Control:max-age=120 per esempio). Scaduto (stantio) il contenuto viene eliminato solo quando non è stato effettuato l'accesso per il tempo specificato da inactive. Quando si accede al contenuto scaduto, NGINX lo aggiorna dal server di origine e reimposta il timer inattivo.
  • dimensione_massima: imposta il limite superiore della dimensione della cache (a 10 gigabyte in questo esempio). È facoltativo; non specificare un valore consente alla cache di crescere per utilizzare tutto lo spazio disponibile su disco. Quando la dimensione della cache raggiunge il limite, un processo chiamato gestore della cache rimuove i file utilizzati meno di recente per riportare la dimensione della cache al di sotto del limite.
  • proxy_cache_path: il percorso del file nella cartella della cache che hai creato.
  • add_header X-Cache-Status $upstream_cache_status: aggiunge un'intestazione HTTP X-Cache-Status nelle risposte ai client

Le opzioni aggiuntive di seguito possono avvantaggiare il tuo server in combinazione con la configurazione della cache del proxy originale:

  • proxy_cache_revalidate: indica a NGINX di usare il condizionale (OTTENERE) richieste durante l'aggiornamento del contenuto dai server di origine. Se un client richiede un elemento memorizzato nella cache ma scaduto come definito dalle intestazioni di controllo della cache, NGINX include il (Se-Modificato-da) campo nell'intestazione del (OTTENERE) richiesta che invia al server di origine. Ciò consente di risparmiare sulla larghezza di banda, perché il server invia l'elemento completo solo se è stato modificato dall'ora registrata nel (Ultima modifica) intestazione allegata al file quando NGINX lo ha originariamente memorizzato nella cache.
  • proxy_cache_min_uses: imposta il numero di volte in cui un elemento deve essere richiesto dai client prima che NGINX lo memorizzi nella cache. Ciò è utile se la cache si riempie costantemente, poiché garantisce che solo gli elementi a cui si accede più frequentemente vengano aggiunti alla cache. Per impostazione predefinita (proxy_cache_min_uses) è impostato su 1.
  • proxy_cache_background_update : Il (in aggiornamento) parametro per il (proxy_cache_use_stale) direttiva, combinata con l'abilitazione del (proxy_cache_background_update) direttiva, indica a NGINX di fornire contenuto non aggiornato quando i client richiedono un elemento scaduto o in fase di aggiornamento dal server di origine. Tutti gli aggiornamenti verranno eseguiti in background. Il file non aggiornato viene restituito per tutte le richieste fino al completo download del file aggiornato.
  • proxy_cache_lock: Con (proxy_cache_lock) abilitato, se più client richiedono un file che non è corrente nella cache a (PERDERE), solo la prima di tali richieste è consentita tramite il server di origine. Le richieste rimanenti attendono che la richiesta venga soddisfatta e quindi estrae il file dalla cache. Privo di (proxy_cache_lock) abilitato, tutte le richieste che risultano in cache miss vanno direttamente al server di origine.

Nginx cache nella RAM

Se il tuo server ha le risorse, la memorizzazione nella cache nella RAM sarà sempre migliore rispetto alla memorizzazione nella cache dei file su disco, questo vale anche per le unità SSD all'avanguardia. Questo è rivolto a server autogestiti e dispone di risorse abbondanti come la ram seduta in giro a non fare nulla. Puoi potenzialmente impostare un ottimo caching della memoria che avrà un impatto immediato sul caricamento del tuo sito web.

Innanzitutto, crea una nuova directory per la memorizzazione nella cache nella RAM:

sudo mkdir -p /cache/nginx/tmpfs

In secondo luogo, monta la directory creata nella RAM con (tmpf) usando il seguente comando:

sudo mount -t tmpfs -o size=2g tmpfs /cache/nginx/tmpfs

Questo monta (/data/nginx/tmpfs) nella RAM, allocando 2 GB. Questo può essere regolato aumentando o diminuendo. I server più piccoli inizierebbero con 512 MB invece di 2 g. Tuttavia, non esiste una risposta giusta o sbagliata poiché ogni server è diverso.

Se è necessario smontare, eseguire il seguente codice:

sudo umount /cache/nginx/ramcache

Per completare la configurazione con la memorizzazione nella cache della RAM con Nginx, è necessario aggiungere quanto segue a (/etc/fstab), quindi quando il server viene riavviato automaticamente, la directory della cache RAM viene ricreata.

Aprire il (/etc/fstab) file usando nano:

sudo nano /etc/fstab

Inserisci quanto segue e regola la posizione e le dimensioni della cache:

tmpfs /cache/nginx/tmpfs tmpfs defaults,size=1g 0 0

pubblicità


Buffer proxy Nginx

Se stai utilizzando un proxy inverso Nginx, un buon modo per aumentare le prestazioni è utilizzare il buffering del proxy. Questo è legato al modo in cui Nginx gestisce la risposta ricevuta dal server proxy. Ciò significa che il server proxy non viene interrogato per ogni richiesta del client, ma i dati vengono serviti dalla cache se i dati memorizzati nella cache sono ancora considerati validi (la vita non è passata).

Esempio di funzionamento di seguito:

#Enables or disables buffering of responses from the proxied server.
proxy_buffering on;
 
#proxy buffer cache sizes
proxy_buffers 4 256k;
proxy_buffer_size 128k; 
proxy_busy_buffers_size 256k;

Memorizzazione nella cache di WordPress

Gli esempi sopra funzionano molto bene con i siti Web WordPress. Tuttavia, saranno necessarie alcune regole aggiuntive per garantire che non stiamo memorizzando nella cache alcune risorse per motivi di sicurezza tra i primi.

Innanzitutto, incollalo sopra la tua area (posizione) che viene memorizzata nella cache nel file di blocco del server:

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/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
    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;
}

Come puoi vedere, stiamo saltando la cache sulle richieste (POST) con una stringa di query che dovrebbe sempre andare a PHP e non memorizzare nella cache tutti gli URL contenenti alcune cose di tutti i giorni come feed, sitemap, ecc.

Quindi, aggiungi le seguenti due righe nella posizione della cache:

        proxy_cache_bypass $skip_cache;
        proxy_no_cache $skip_cache;

Per i nuovi utenti che desiderano vedere un esempio completo, vedere di seguito in un ambiente di lavoro:

    location / {
        proxy_pass http://webserver;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache my_zone;
        proxy_cache_key $scheme$request_method$proxy_host$request_uri;
        proxy_cache_valid 404 302 1m;
        proxy_cache_valid 200 31d;
        add_header X-Cache-Status $upstream_cache_status;
        proxy_buffering on;
        proxy_buffers 256 16k;
        proxy_buffer_size 32k;
        proxy_http_version   1.1;
        proxy_cache_bypass $skip_cache;
        proxy_no_cache $skip_cache;
    }
}

pubblicità


Nginx Browser Caching

La memorizzazione nella cache del browser è un ottimo modo per ridurre il carico sui server, soprattutto se si eseguono blog o altri contenuti simili. Puoi impostare un tempo esteso per lo shopping e i forum bullet in cui il contenuto dinamico cambia più spesso.

Di seguito sono riportati gli esempi più comuni di cattura popolare. Inserisci questo nel blocco del tuo server.

  # assets, media
  location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
  expires    365d;
  access_log off;
  }
  
  # svg, fonts
  location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
  add_header Access-Control-Allow-Origin "*";
  expires    365d;
  access_log off;
  }

Per salvare su disco IO e logging, puoi dichiarare queste risorse disattivate nel tuo log di accesso per aumentare le prestazioni sul server se stai lottando con tempi di caricamento più elevati.

Commenti e Conclusione

Nel tutorial, hai imparato come utilizzare la cache del proxy Nginx utilizzando file e RAM. Per ulteriori informazioni sulla memorizzazione nella cache di Nginx, visita la documentazione di Nginx Caching per saperne di più in quanto è piuttosto ampia e offre opzioni aggiuntive. Gli extra possono essere fatti poiché la guida ha appena scalfito la superficie di ciò che si può davvero fare.

Sottoscrivi
Notifica
0 Commenti
Feedback in linea
Visualizza tutti i commenti
0
Amerei i tuoi pensieri, per favore commenta.x