nginx cached index.html erzwingt das Neuladen
Während einer Servermigration fehlten in einer neuen Nginx-Konfiguration Cache-Steueranweisungen. Daher haben wir einen Cache erhalten, index.html
der für unser SPA sehr schlecht ist und nicht mehr aktualisiert wird, wenn wir neuen Code bereitstellen. Wir müssen die index.html nicht zwischengespeichert haben.
Dies war unsere (schlechte) Nginx-Konfiguration, die einige Tage online war:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Wir haben unsere Konfiguration korrigiert:
server {
listen 80;
root /usr/share/nginx/html;
location / {
index index.html index.htm;
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
location ~* \.(js|jpg|jpeg|gif|png|svg|css)$ {
add_header Cache-Control "max-age=31536000, public";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
FRAGE
Kunden, die in den letzten Tagen auf unserer Webseite waren, haben eine alte index.html zwischengespeichert. Wie können wir ihre Browser zwingen, ihre zwischengespeicherten Daten zu löschen index.html
?
Antworten
Es gibt keine Möglichkeit, den Browser-Cache auf der Benutzerseite (Browser) manuell zurückzusetzen, während der Client keine neuen Inhalte an den Server anfordert. In diesem Fall kann der Zugriff auf alle Skripte nützlich sein, die Ihr SPA ohne Cache herunterlädt. In diesem Fall können Sie dieses Skript ändern und das erneute Laden der Seite erzwingen (aber seien Sie vorsichtig - Sie benötigen ein Flag, um ein dauerhaftes erneutes Erzwingen der Seite nach jedem Laden der Seite zu verhindern). Wenn Sie beispielsweise GTM vor Ort haben, kann dies hilfreich sein.
UPD: Ich bin kein JS-Spezialist, aber Sie mussten auf allen Seiten wie diesem JS-Skript ein GTM-Tag hinzufügen:
function getCookie(name) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
was_reloaded = getCookie('was_reloaded')
alert(was_reloaded)
if (was_reloaded != 'yes') {
document.cookie = "was_reloaded=yes; path=/; max-age=3600;"
location.reload();
} }