nginx cached index.html принудительно перезагрузить
Во время миграции сервера в новой конфигурации nginx отсутствовали директивы управления кешем. Следовательно, мы получили кеширование, index.html
что очень плохо для нашего SPA, которое больше не обновляется, если мы развертываем новый код. Нам нужно, чтобы index.html не кешировался.
Это была наша (плохая) конфигурация nginx, которая несколько дней была в сети:
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;
}
}
Мы исправили наш конфиг:
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;
}
}
ВОПРОС
Клиенты, которые заходили на нашу веб-страницу в течение последних дней, кэшировали старый index.html. Как мы можем заставить их браузеры отказаться от кеширования index.html
?
Ответы
Невозможно вручную сбросить кеш браузера на стороне пользователя (в браузере), пока клиент не запрашивает у сервера новый контент. В этом случае может быть полезен доступ к любым скриптам, которые вы скачиваете без кеширования. В этом случае вы можете изменить этот скрипт и запустить принудительную перезагрузку страницы (но будьте осторожны - вам понадобится какой-либо флаг для предотвращения постоянной принудительной перезагрузки после каждой загрузки страницы). Например, если у вас есть GTM - это может помочь.
UPD: Я не специалист по js, но вам нужно было добавить тег GTM на все страницы, как этот js-скрипт:
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();
} }