Estou usando o nginx como proxy reverso e para armazenamento em cache. Atualmente o cache da localização "/test" será renovado a cada 2 horas: "proxy_cache_valid 200 302 301 304 2h;"
É possível renovar o cache apenas se um arquivo for alterado?
Obrigado!
Responder1
Isso deve ser tratado genericamente para você.
Se um arquivo estiver armazenado em cache em um navegador e o navegador solicitar esse arquivo novamente, e o arquivo tiver sido eliminado do cache do servidor, o servidor ainda examinará o if-modified-since
cabeçalho da solicitação.
O servidor verificará esse valor de data e hora e, se determinar que nenhuma alteração ocorreu, o servidor enviará uma 304
resposta, informando ao navegador que está tudo bem para carregar a versão em cache e que o objeto real não é servidor e foi baixado novamente.
Se o valor for alterado, o objeto será servidor e a cópia do cache será atualizada.
https://www.keycdn.com/support/if-modified-since-http-header
IMHO, o cache é algo que você realmente deve controlar com Cache-Control
cabeçalhos, em vez de configuração do servidor.
As opções de configuração do servidor existem como proteção contra falhas quando o Cache-Control não existe ou está configurado de forma ilógica.
Responder2
Presumo que estejamos falando sobre conteúdo gerado que ainda não é um arquivo estático em seu servidor web (arquivos estáticos em seu servidor web geralmente são rápidos o suficiente).
A questão principal é como você informa ao Nginx que o conteúdo em cache foi alterado.
A revalidação parece boa, mas tem o impacto de que principalmente o processo de verificação de atualizações é tão caro quanto gerá-la. Então essa não é uma opção real.
A melhor prática é limpar o conteúdo caso ele tenha sido atualizado (por exemplo, tenha sido alterado em seu CMS). Purge é o processo para invalidar objetos armazenados em cache. Nginx suporta Purge apenas na versão NginxPlus. No entanto, você pode fazer quase o mesmo recarregando o objeto em cache.
Aqui está um tutorial simples:
Configuração Nginx
...
# default location
location / {
try_files $uri @php;
}
# PHP handler
location @php {
try_files $uri /index.php;
access_log /var/log/nginx/access.log;
# include fastcgi_params
include fastcgi_params;
# how to connect to PHP-FPM
fastcgi_pass php-fpm;
# enable caching
fastcgi_cache phpfpm;
# don't look for existing cache objects with HTTP header X-Purge
fastcgi_cache_bypass $http_x_purge;
}
...
Curl para limpar um documento
curl https://example.com/site1/overview.jpeg -s -H "X-Purge: true"