O que significa o keys_zone = myCache: 8m?
Como a documentação disse , o nginx manterá todas as chaves ativas e as informações sobre os dados são armazenadas em uma zona de memória compartilhada, cujas name
e size
são configuradas pelo parâmetro keys_zone. Por uma questão de integridade, vamos dividir por parte
/var/cache/nginx
é o local onde o cache real é armazenado. Dentro da pasta, o arquivo de cache era um arquivo binário, mas você pode facilmente identificar a tag html dentro dela.
levels=1:2
O parâmetro é levels define o número de níveis de subdiretório no cache.
keys_zone=myCache:8m
estava definindo a zona de memória compartilhada denominada myCache com tamanho máximo de 8 MB. Ele contém todas as chaves e metadados ativos do cache. Portanto, sempre que o nginx verifica se uma página foi armazenada em cache, ele consulta primeiro a zona de memória compartilhada e, em seguida, procura o local do cache real, /var/cache/nginx
se houver cache.
max_size
era o tamanho máximo do cache, por exemplo, o tamanho dos arquivos /var/cache/nginx
.
inactive=1h
especificar o tempo máximo de inatividade em cache pode ser armazenado. Os dados em cache que não são acessados durante o tempo especificado pelo inactive
parâmetro são removidos do cache, independentemente de sua atualização.
Como funciona a validação e exclusão de cache
Extraído das listas de discussão nginx
A diretiva proxy_cache_valid especifica por quanto tempo a resposta será considerada válida (e será retornada sem nenhuma solicitação de back-end). Após esse período, a resposta será considerada "obsoleta" e não será retornada ou dependerá da configuração proxy_cache_use_stale .
O argumento inativo de proxy_cache_path especifica por quanto tempo a resposta será armazenada no cache após o último uso. Observe que mesmo respostas obsoletas serão consideradas usadas recentemente se houver solicitações para elas.
Pelo que entendi, aqui o pseudocódigo de como o nginx funciona
Quando o pedido chegar
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
Em outro processo, o gerenciador de cache executa essa lógica
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
E se proxy_cache_valid (12h) for maior que o valor inativo especificado (1h) no proxy_cache_path?
Desde que a solicitação e o acesso ao cache específico sejam acessados, esse objeto de cache continuará válido até 12h após o objeto ser colocado no cache. Depois disso, o cache foi considerado inválido, portanto o nginx buscará no back-end e redefinirá o timer válido. Mas se o objeto estava inativo (não acessado) por mais de uma hora - mesmo em 12h - período de cache válido -, o nginx o excluirá por causa do inactive
parâmetro.
365d
e válido é1d
, o nginx buscará as solicitações no cache todos os dias durante um ano, mesmo que ninguém faça essa solicitação?