Temos essa configuração no nosso nginx.conf
por um bom tempo.
sendfile on;
Quando tivermos atualizado um arquivo, por exemplo, /js/main.js
e acessado pelo navegador https://test.com/js/main.js?newrandomtimestamp , ele ainda carregará a versão mais antiga, a menos que façamos uma atualização completa (limpar o cache) do navegador.
Mas quando alteramos as configurações do sendfile; enviar arquivo; o navegador carregará a versão correta do arquivo atualizado.
Para nosso servidor Web de produção, devemos usar o sendfile; ou sendfile off ;? Se sendfile ativado; é necessário (pode, por motivos de melhor armazenamento em cache? Desempenho mais rápido?), então como resolver o problema mencionado acima?
Abaixo está o nginx.conf
nosso servidor de produção e estamos usando a versão 1.7.5:
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
client_max_body_size 8m;
sendfile on;
keepalive_timeout 65;
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
large_client_header_buffers 4 32k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript application/javascript text/css application/xml application/json;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
}
sendfile
e unidades do VirtualBox (por exemplo, virtualbox.org/ticket/819 ). Pode haver um problema semelhante com a Amazon.Respostas:
Pode haver uma solução para o seu problema de armazenamento em cache de arquivos no nível do aplicativo. É um problema bem conhecido no mundo do desenvolvimento JavaScript. A solução é geralmente chamada de algo como "hash de saída".
A idéia básica é adicionar um hash do conteúdo do arquivo ao nome do arquivo, para que o arquivo seja considerado "novo" e não encontrado no cache.
Angular faz isso no tempo de compilação (consulte
--outputHashing
:).fonte
Isso por si só, uma manifestação clara de que o "problema" está no lado do cliente.
sendfile
não tem nada a ver com o armazenamento em cache, apenas como o NGINX armazena em buffer / lê o arquivo (tentando inserir o conteúdo diretamente no "slot" da rede ou em buffer o conteúdo primeiro).A única explicação razoável é que seu navegador específico é descartado
?newrandomtimestamp
como um parâmetro sem valor; portanto, ele está carregando o mesmo recurso em cache paraexample.com?blah
eexample.com?boo
.Se você tentar, o
https://example.com/js/main.js?v=newrandomtimestamp
esquema deve fornecer sempre novos conteúdos.fonte
você também pode usar uma exclusão do cache deste arquivo como eu faço
fonte