Ich habe kürzlich ein größeres Update für eine Website veröffentlicht und habe ein Problem, bei dem sich einige Benutzer nicht anmelden können, weil ihr Browser alte Javascript-Dateien lädt . Einige der Dinge, die ich getan habe, sind:
- Cache-Busting aller Javascript-Dateien
- In
sendfile off
nginx.conf einstellen - In
expires 1s
mysite.conf einstellen - Cache-Control-Header explizit setzen:
add_header Cache-Control no-cache;
Unten sind meine Conf-Dateien für Nginx. Jede Hilfe wäre sehr dankbar.
/etc/nginx/sites-enabled/mysite.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
server {
listen 80;
server_name mysite.com;
return 301 https://www.mysite.com$request_uri;
}
server {
# listen for connections on all hostname/IP and at TCP port 80
listen *:80;
# name-based virtual hosting
server_name www.mysite.com;
# location of the web root for all static files (this should be changed for local development)
root /var/mysite.com/static;
# redirect http requests to https
if ($http_x_forwarded_proto = "http") {
rewrite ^/(.*)$ https://www.mysite.com/$1 permanent;
}
# error pages
error_page 403 /errors/403.html;
error_page 404 /errors/404.html;
error_page 408 /errors/408.html;
error_page 500 502 503 504 /errors/500.html;
# error and access out
error_log /var/log/nginx/error.mysite.log;
access_log /var/log/nginx/access.mysite.log;
# use Nginx's gzip static module
gzip_static on;
gzip_types application/x-javascript text/css;
location / {
# redefine and add some request header lines which will be passed along to the node server
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
# set the address of the node proxied server
proxy_pass http://127.0.0.1:9001;
# forbid all proxy_redirect directives at this level
proxy_redirect off;
}
# do a regular expression match for any files ending in the list of extensions
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ {
# clear all access_log directives for the current level
access_log off;
add_header Cache-Control no-cache;
# set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years
expires 1s;
}
}
/etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile off;
tcp_nopush off;
tcp_nodelay off;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/var/cache/nginx
sind vollständig leerDurch das Setzen
expires -1;
innerhalb eines Location Blocks wird das Caching tatsächlich vollständig deaktiviert.quelle
Sie ignorieren den Cache Ihres Lesebrowsers. Sofern Sie den Namen Ihrer Objekte nicht ändern (z. B. eine Versionsnummer zum .js hinzufügen) oder die Objekte mit einem ETag oder Änderungsdatum gesendet wurden, kann der Browser davon ausgehen, dass seine Version des Objekts noch für einige Jahre gültig ist Jahrzehnte, und konsultieren Sie nie Ihren Server.
quelle
Höchstwahrscheinlich haben Ihre Clients eine zwischengespeicherte Version und prüfen nicht, ob sie auf Ihrem Server geändert wurden. Sie müssen also Ihre Cache-Einstellungen korrigieren, um sie in einen anderen Ordner zu verschieben. Z.B. Wenn Sie stattdessen /styles/*.css nach / css / verschieben und alle js-Dateien von Skripten nach / js / in ihren Browsern, müssen Sie die Ressourcen erneut abrufen.
quelle
Konfrontiert das gleiche Problem. Wenn Sie Cloudflare für den DDOS-Schutz verwenden (falls nicht, aktivieren Sie es bitte)
quelle