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?inactive
parâmetros levam valores de tempo, mas não vejo quais valores posso usar além deh
(cerca de 1 mês? Ou 1 dia? Etc). E com o que devemos especificarmax_size
? Bytes? Posso usar 1M por 1 megabyte?