Comprensione della direttiva nginx proxy_cache_path


30

Supponiamo di avere questo file di configurazione di nginx

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Che cosa keys_zone=myCache:8msignifica? Non c'è molto da dire nei documenti:

Inoltre, tutte le chiavi attive e le informazioni sui dati sono archiviate in una zona di memoria condivisa, il cui nome e dimensione sono configurati dal parametro keys_zone.

  • Cosa succede se proxy_cache_valid( 12h) è maggiore del inactivevalore specificato ( 1h) in proxy_cache_path? Quale regola seguirà? per esempio

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Grazie!

Risposte:


39

Cosa significa keys_zone = myCache: 8m?

Come detto dalla documentazione , nginx manterrà tutte le chiavi attive e le informazioni sui dati sono archiviate in una zona di memoria condivisa, le cui namee sizesono configurate dal parametro keys_zone. Per completezza, suddividiamo per parte

  • /var/cache/nginxè il luogo in cui è stata memorizzata la cache effettiva. All'interno della cartella, il file cache era un file binario ma puoi facilmente individuare il tag html al suo interno.
  • levels=1:2 Il parametro livelli imposta il numero di livelli della sottodirectory nella cache.
  • keys_zone=myCache:8mstava definendo la zona di memoria condivisa denominata myCache con dimensione massima di 8 MB. Contiene tutte le chiavi e i metadati attivi della cache. Pertanto, ogni volta che nginx verifica se una pagina è stata memorizzata nella cache, consulta prima la zona di memoria condivisa, quindi cerca la posizione della cache effettiva /var/cache/nginxse esiste cache.
  • max_sizeera la dimensione massima della cache, ad es. dimensione dei file attivata /var/cache/nginx.
  • inactive=1hspecificare che è possibile memorizzare la cache del tempo massimo inattivo. I dati memorizzati nella cache a cui non si accede durante il tempo specificato dal inactiveparametro vengono rimossi dalla cache indipendentemente dalla loro freschezza.

Funzionamento della convalida e dell'eliminazione della cache

Tratto dalle mailing list di nginx

  • La direttiva proxy_cache_valid specifica per quanto tempo la risposta sarà considerata valida (e verrà restituita senza alcuna richiesta di backend). Trascorso questo tempo la risposta verrà considerata "non aggiornata" e non verrà restituita o dipenderà dall'impostazione proxy_cache_use_stale .

  • L'argomento inattivo di proxy_cache_path specifica per quanto tempo la risposta verrà archiviata nella cache dopo l'ultimo utilizzo. Si noti che anche le risposte non aggiornate verranno considerate utilizzate di recente se sono presenti richieste.

A quanto ho capito, qui lo pseudocodice su come funziona nginx

Quando richiesta in arrivo

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

In altri processi, il gestore della cache esegue questa logica

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Cosa succede se proxy_cache_valid (12h) è superiore al valore inattivo specificato (1h) in proxy_cache_path?

Fintanto che la richiesta e l'accesso alla cache particolare, quell'oggetto cache rimarrà valido fino a 12 ore dopo l'inserimento dell'oggetto nella cache. Successivamente, la cache è stata considerata non valida, quindi nginx recupererà dal back-end e ripristinerà il timer valido. Ma se l'oggetto era inattivo (non accessibile) per più di un'ora, anche in un periodo di cache valido di 12 ore, nginx lo eliminerà a causa del inactiveparametro.


"Successivamente, la cache è stata considerata non valida, quindi nginx recupererà dal back-end e ripristinerà il timer valido." - Interessante. Quindi nginx recupera la richiesta anche se nessun utente la recupera? Quindi, per esempio, se inattivo è 365de è valido 1dallora nginx recupererà le richieste nella cache ogni giorno per un anno anche se nessuno le fa questa richiesta?
Martin Thoma,

1
Bella risposta, ma non riesco a trovare alcuna documentazione sulle unità di misura che utilizziamo con alcuni di questi parametri. Ad esempio, i inactiveparametri prendono valori di tempo ma non vedo quali valori posso usare a parte h(come circa 1 mese? O 1 giorno? Ecc). E con cosa dovremmo specificare max_size? Bytes? Posso usare 1M per 1 megabyte?
Sunil D.

4
@SunilD. - ecco qui: nginx.org/it/docs/syntax.html
adamczi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.