Existe uma maneira inteligente de armazenar em cache com o Nginx?

1

Temos um Apache por trás do Nginx. O Nginx é usado para balancear a carga entre servidores da Web e armazenar em cache o conteúdo estático. O único problema é que, toda vez que o aplicativo da Web é atualizado, precisamos limpar completamente o cache Nginx (o cache de arquivo estático está configurado para um valor bastante alto, alguns arquivos estáticos mudam com frequência, outros não).

Existe uma maneira inteligente de permitir que o Nginx verifique periodicamente se o arquivo foi modificado (nota: o Apache retorna "Data" nos cabeçalhos de resposta), já que o arquivo de hora foi armazenado em cache pelo Nginx.

    
por Alex 12.07.2012 / 04:21

2 respostas

4

Você terá que escrever um script que rastreie periodicamente o conteúdo interno que deseja armazenar em cache e faça com que o script rastreie cada URL atualizado.

No script, defina um cabeçalho HTTP (o cabeçalho real não importa) e, em seguida, use proxy_cache_bypass para forçar o nginx a recuperá-lo do upstream.

Exemplo: seu script de cache priming define o cabeçalho HTTP X-Really-Get-It: true . No nginx.conf você irá configurar:

proxy_cache_bypass $http_x_really_get_it;

O nginx buscará o arquivo pelo upstream em vez do cache e, em seguida, armazenará o resultado em cache.

Se você estiver disposto a usar módulos nginx de terceiros, também poderá usar o módulo cache_purge . Parece bastante mal documentado, no entanto.

    
por 12.07.2012 / 05:20
1

Basta veicular seu conteúdo com as informações corretas de armazenamento em cache. Isso resolverá o problema em seu proxy e em qualquer entre você e o cliente, por exemplo,

cache-control: max-age=86400; s-maxage=3600

instrui os navegadores a armazenar em cache por 1 dia, mas os proxies devem armazenar em cache por 1 hora.

Mas uma solução melhor é usar URLs diferentes para conteúdo atualizado.

    
por 12.07.2012 / 12:11