Eu observei alguns 406 status sendo armazenados em cache na minha instância de proxy Nginx e quero ter certeza de que isso não ocorra novamente.
Descobri que uma causa possível é que alguém definiu proxy_cache_valid any
por vários minutos, que tiveram que ser removidos. Meu entendimento atual é que, por padrão, nada seria armazenado em cache e, em seguida, se houver um proxy_cache_valid
, que é usado, e se houver algum controle de cache ou expirar cabeçalhos, eles substituirão essa configuração.
Portanto, se eu estiver entendendo corretamente, esperaria que os erros por padrão não fossem armazenados em cache, mas que, se um cabeçalho HTTP o substituir, ele poderá ser armazenado em cache. Uma solução seria geralmente ignorar esses cabeçalhos HTTP. Então, a primeira pergunta é se estou correto nesse entendimento.
Supondo que tudo isso seja verdade, na minha situação, quero manter os cabeçalhos de controle de cache neste servidor, portanto, não quero ignorá-los. No entanto, estou preocupado com o fato de o upstream poder configurá-los mesmo em status de erro. Estou procurando uma solução que me permita ter certeza de que esses status, como 500, 503 etc., nunca são armazenados em cache.
Veja o que estou pensando para a solução atual:
http {
map $upstream_status $never_cache {
200 0; # Want to receive from cache as in proxy_cache_valid
301 0; # Want to receive from cache as in proxy_cache_valid
404 0; # Want to receive from cache as in proxy_cache_valid
500 0; # Want stale content from proxy_cache_use_stale
502 0; # Want stale content from proxy_cache_use_stale
503 0; # Want stale content from proxy_cache_use_stale
504 0; # Want stale content from proxy_cache_use_stale
default 1; # Everything else should never be cached
}
proxy_cache_valid 200 301 404 10m;
#proxy_cache_valid any 0s # No active line for this as it's default
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_no_cache $never_cache;
...
}
Essas configurações são razoáveis e farão o que eu espero? Existe uma maneira melhor de conseguir isso? Eu não consegui encontrar muita documentação sobre isso, o que me faz pensar que estou perdendo algo muito grande.