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 name
e size
sono 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:8m
stava 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/nginx
se esiste cache.
max_size
era la dimensione massima della cache, ad es. dimensione dei file attivata /var/cache/nginx
.
inactive=1h
specificare che è possibile memorizzare la cache del tempo massimo inattivo. I dati memorizzati nella cache a cui non si accede durante il tempo specificato dal inactive
parametro 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 inactive
parametro.
365d
e è valido1d
allora nginx recupererà le richieste nella cache ogni giorno per un anno anche se nessuno le fa questa richiesta?