nginx cached index.html强制重新加载

nginx cached index.html强制重新加载,nginx,caching,browser-cache,Nginx,Caching,Browser Cache,在服务器迁移期间,新的nginx配置缺少缓存控制指令。因此,我们最终得到了一个缓存的index.html,这对我们的SPA非常不利,如果我们部署新代码,它将不再刷新。我们需要不缓存index.html 这是我们的(不好的)nginx配置,几天来一直在线: server { listen 80; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $ur

在服务器迁移期间,新的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();
} }

事实上,我们使用GTM,你能详细说明我们如何利用它来强制重新加载旧版本吗?@Stick我用例子更新了答案。希望这有帮助。