Wir haben diese Einstellung nginx.conf
für eine ganze Weile in unserer .
sendfile on;
Wenn wir eine Datei aktualisiert haben, z. B. /js/main.js
über den Browser https://test.com/js/main.js?newrandomtimestamp , wird die ältere Version weiterhin geladen, es sei denn, wir führen eine vollständige Aktualisierung (Cache löschen) in unserem Browser durch.
Aber wenn wir die Einstellungen von sendfile an ändern; Datei abschicken; Der Browser lädt die richtige Version der aktualisierten Datei.
Sollten wir für unseren Produktionswebserver sendfile on verwenden? oder sendfile off;? Wenn sendfile on; ist erforderlich (Mai aus Gründen des besseren Caching? Schnellere Leistung?), wie kann dann das oben erwähnte Problem gelöst werden?
Unten finden Sie die nginx.conf
in unserem Produktionsserver, und wir verwenden 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
VirtualBox-Laufwerk (z . B. virtualbox.org/ticket/819 ). Möglicherweise gibt es ein ähnliches Problem mit Amazon.Antworten:
Möglicherweise gibt es eine Lösung für Ihr Problem beim Zwischenspeichern von Dateien auf Anwendungsebene. Es ist ein bekanntes Problem in der JavaScript-Entwicklungswelt. Die Lösung wird normalerweise als "Ausgabe-Hashing" bezeichnet.
Die Grundidee besteht darin, dem Dateinamen einen Hash des Dateiinhalts hinzuzufügen, damit die Datei als "neu" betrachtet und nicht im Cache gefunden wird.
Angular macht es zur Build-Zeit (siehe :)
--outputHashing
.quelle
Dies an sich ist eine klare Manifestation, dass das "Problem" auf der Clientseite liegt.
sendfile
hat nichts mit Caching zu tun, sondern nur damit, wie NGINX die Datei puffert / liest (versucht, den Inhalt direkt in den "Steckplatz" des Netzwerks zu stopfen oder zuerst den Inhalt zu puffern).Die einzig vernünftige Erklärung ist, dass Ihr spezifischer Browser
?newrandomtimestamp
als Parameter ohne Wert verworfen wird, sodass für beideexample.com?blah
und dieselbe zwischengespeicherte Ressource geladen wirdexample.com?boo
.Wenn Sie es versucht, dann
https://example.com/js/main.js?v=newrandomtimestamp
Schema, sollte neue Inhalten gibt jedes Mal.quelle
Sie können auch ein Ausschließen aus dem Caching dieser Datei verwenden, wie ich es tue
quelle