Nginx Stale Cache e proxy_cache_path

3

Coloquei o Nginx na frente de um servidor de aplicativos php como um proxy reverso para armazenar em cache o conteúdo dinâmico e salvar alguns acessos ao php.

Configurei o Nginx com as configurações abaixo, com a esperança de alcançar o seguinte comportamento.

1) O Nginx armazenará em cache 200 conteúdos do código de status por 20 m antes de tentar refazer os servidores de aplicativos

2) O cache permanecerá no local por até 7 dias para lidar com solicitações antigas de conteúdo acessado com pouca frequência.

3) Solicitações recebidas em 20 minutos depois que o conteúdo foi originalmente armazenado em cache dispararão uma solicitação para o back-end para uma nova atualização, mas servirão a versão obsoleta para que o cliente receba uma resposta instantânea.

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:512m inactive=7d max_size=15000m;
proxy_cache_use_stale timeout updating error invalid_header;
proxy_cache_valid 200 20m; 
proxy_cache_valid       404 1m;
proxy_cache_valid       any 15m;

ATUALIZAÇÃO: Depois de executar mais alguns testes e observar os logs do servidor, parece que o conteúdo com mais de 20 milhões de anos não está sendo servido do cache como obsoleto, mas apenas está sendo compilado no cache_file_system.

Alguma idéia de como obter o Nginx para veicular conteúdo obsoleto por um período prolongado? O caso de uso é basicamente o armazenamento em cache de conteúdo raramente acessado que é caro para gerar em meus servidores de aplicativos. Ser capaz de servir itens obsoletos vários dias depois de terem expirado no cache quando um hit finalmente chega seria um grande aumento de desempenho. Se isso não for possível com o Nginx, estou aberto a outras opções de proxy / armazenamento em cache (estou usando apenas essa instância do Nginx como cache).

    
por erikcw 31.08.2011 / 02:17

2 respostas

3

Acontece que isso não é atualmente possível com o Nginx. Acabei montando o verniz com um TTL longo (7 dias), bem como um longo ajuste de graça (2 dias). Então eu tenho um script acertar cada URL a cada poucos dias e forçar um aquecimento do cache .

Dada a quantidade de conteúdo que eu preciso armazenar em cache, e quão raramente cada item é acessado, eu fiquei inicialmente preocupado que o custo de executar o Varnish fosse proibitivo (toda essa RAM!) - e é por isso que eu estava procurando no armazenamento em cache baseado em arquivos do Nginx. No entanto, o Varnish tem, de fato, uma opção de armazenamento em cache com suporte de arquivos que tem funcionado muito bem para mim. Até agora, meu cache tem cerca de 80 GB e funciona muito bem!

    
por 07.09.2011 / 01:37
0

Todos parecem bons. Você estava tentando perguntar por que isso não estava funcionando?

Uma coisa que gostaria de acrescentar é que o seu proxy_use_stale provavelmente deve ter alguns outros códigos de erro HTTP. Eu suponho que você gostaria de continuar servindo obsoleto do cache se o php está retornando um 503 devido a problemas de excesso de capacidade.

    
por 31.08.2011 / 04:13

Tags