Nginx在重复更改后不会刷新文件。返回上次修改的旧标头

Nginx在重复更改后不会刷新文件。返回上次修改的旧标头,nginx,caching,browser-cache,last-modified,Nginx,Caching,Browser Cache,Last Modified,我有网络应用程序,有一个界面,我可以刷新一个商店的标志。当我刷新徽标时,使用新的上次修改的标题创建新文件: Nginx返回已更正的更新文件 之后,我再次更新标志。但我得到的旧徽标带有上次修改的旧,,尽管徽标url文件已更改(您可以在url末尾看到查询时间戳): 如果我通过浏览器执行直接请求,则我将获得更新的文件: 这可以通过内容长度在文件大小中看到 我的图像nginx配置为: location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ { expires

我有网络应用程序,有一个界面,我可以刷新一个商店的标志。当我刷新徽标时,使用新的
上次修改的
标题创建新文件:

Nginx返回已更正的更新文件

之后,我再次更新标志。但我得到的旧徽标带有上次修改的旧
,尽管徽标url文件已更改(您可以在url末尾看到查询时间戳):

如果我通过浏览器执行直接请求,则我将获得更新的文件:

这可以通过内容长度在文件大小中看到

我的图像nginx配置为:

location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
       expires 10d;     
       try_files $uri @app;
}

我不明白我做错了什么。请帮帮我。提前感谢

没有足够的信息来确定所遇到问题的根本原因;我还认为,所有新来问这个问题的人都会遇到一个与上述问题略有不同的问题

Nginx有指令,您可以在中查看实现的源代码


一般来说,仅仅因为URL有一个已更改的epoch参数(UNIX time作为尾随slug的
部分),并不意味着必须提供一个新的资源,因此,要确定nginx是错误的,仅仅是因为URL在前两个图片之间不同,而上次修改的
时间是相同的,这是不对的。同样,最后的第三张图片列出了一个未修改的响应,但是响应中没有关于标题的信息,并且图片的属性也没有任何意义。

根据我的经验,这可能不是nginx的问题,而是常见的浏览器行为

如果您强制浏览器刷新页面,浏览器可能会刷新页面本身,但文件链接并不总是填充的,文件是从缓存中提供的。
如果我必须多次更改图像、样式表或脚本文件等文件,我会为相应的文件打开一个额外的选项卡,并在包含该文件的页面之前首先填充该选项卡


如果您具有服务器访问权限(在您提到nginx时必须假定这一点),则可以将
最大年龄
减少到几秒钟,或者为文件设置
无缓存
-头。然后浏览器将始终提供最新版本。

更改nginx配置以减少过期时间。您可以看到,
Expires
Last Modified
之间的差异是10天,这反映在配置文件中

location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
   expires 1M;     
   try_files $uri @app;
}

可能是浏览器或其他缓存在这里工作。如果使用curl-v而不是浏览器重复测试,将返回哪些标题?Nginx&代理也可以缓存内容。需要更多的信息来充分解释为什么会发生这种行为。请注意,ETag在您的示例中也是一样的,这是一个指标,表明您的文件被缓存在某个地方,即使URL发生了更改。我还添加了更多关于使用
curl
测试这种行为的实际方法的信息,具体到不是OP遇到的问题,而是赏金所有人遇到的问题,赏金所有人遇到的问题与上次修改的问题略有不同(很相似)。