Nous avons ce paramètre dans notre nginx.conf
depuis un certain temps.
sendfile on;
Lorsque nous avons mis à jour un fichier, par exemple /js/main.js
et que nous y accédons depuis le navigateur https://test.com/js/main.js?newrandomtimestamp , il chargera toujours l'ancienne version à moins que nous ne rafraîchissions complètement (vider le cache) à partir de notre navigateur.
Mais lorsque nous modifions les paramètres de sendfile; envoyer le fichier; le navigateur chargera la version correcte du fichier mis à jour.
Pour notre serveur Web de production, devrions-nous utiliser sendfile sur; ou envoyer le fichier ;? Si sendfile est activé; est nécessaire (mai pour une meilleure mise en cache? Des performances plus rapides?) alors comment résoudre le problème mentionné ci-dessus?
Ci-dessous se trouve nginx.conf
dans notre serveur de production, et nous utilisons la version 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
lecteur VirtualBox (par exemple virtualbox.org/ticket/819 ). Il se peut qu'il y ait un problème similaire avec Amazon.Réponses:
Il peut y avoir une solution à votre problème de mise en cache de fichiers au niveau de l'application. C'est un problème bien connu dans le monde du développement JavaScript. La solution est généralement appelée quelque chose comme "hachage de sortie".
L'idée de base est d'ajouter un hachage du contenu du fichier au nom du fichier afin que le fichier soit considéré comme "nouveau" et non trouvé dans le cache.
Angular le fait au moment de la construction (voir:)
--outputHashing
.la source
Cela en soi, une manifestation claire que le «problème» est du côté client.
sendfile
n'a rien à voir avec la mise en cache, seulement comment NGINX met en mémoire tampon / lit le fichier (en essayant de bourrer le contenu directement dans le "slot" du réseau, ou en tamponnant d'abord son contenu).La seule explication raisonnable est que votre navigateur spécifique se défait en
?newrandomtimestamp
tant que paramètre sans valeur, il charge donc la même ressource mise en cache pour l'unexample.com?blah
et l' autreexample.com?boo
.Si vous essayez, le
https://example.com/js/main.js?v=newrandomtimestamp
schéma devrait à chaque fois donner un contenu plus récent.la source
vous csn utilisez également une exclusion de la mise en cache de ce fichier comme je le fais
la source