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

时间:2018-06-12 09:51:08

标签: nginx caching browser-cache last-modified

我有网络应用程序,并且有可以刷新商店的标识的界面。刷新徽标时,我使用新的last-modified标题创建新文件:

enter image description here

Nginx返回更正的更新文件。

之后我再次更新徽标。但我使用旧版last-modified获取旧徽标,虽然徽标网址文件已更改(您可以在网址末尾看到查询时间戳):

enter image description here

如果我通过浏览器执行直接请求,那么我会获得更新文件:

enter image description here

这可以通过content-length在文件大小中看到。

我对图片的nginx配置是:

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

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

3 个答案:

答案 0 :(得分:1)

没有足够的信息来确定所遇到问题的根本原因;我还可以想象,所有遇到此问题的新人都会遇到一个与上面概述的问题稍有不同的问题。

Nginx具有http://nginx.org/r/if_modified_since指令,您可以在ngx_http_not_modified_filter_module.c :: ngx_http_not_modified_header_filter()中查看实现的源代码。

通常,仅因为URL的纪元参数已更改(Function GetAlphaAndNums(Optional ByVal alphaLength& = 26, Optional ByVal numLength& = 10) As Variant() Dim chars, i& ' [1] get ASC values of alphabet If alphaLength > 0 Then If alphaLength > 26 Then alphaLength = 26 ' allow alphabetic characters from A-Z only chars = Evaluate("column(1:" & alphaLength & ")+64") ' assign alphabetic asc values to 1-based array chars Else ' (i.e. no alphabetic characters at all) If numLength = 0 Then numLength = 1 ' avoid empty array ReDim chars(1 To Abs(numLength)) ' define any array length if no alphabetic chars at al End If ReDim Preserve chars(1 To alphaLength + numLength) ' provide for sufficient items ' [2] Fill array with characters and numbers For i = 1 To UBound(chars) chars(i) = IIf(i <= alphaLength, Chr(chars(i)), CStr(i - alphaLength - 1)) Next i GetAlphaAndNums = chars ' return array End Function 部分以UNIX时间作为尾随符号),这并不意味着必须提供新的资源,因此,仅仅因为前两张图片之间的URL不同而?时间相同,就无法确定nginx是错误的。同样,最后的第三张图片列出了Last-Modified响应,但是响应中没有有关If-Modified-Since nor If-None-Match标题的信息,图片的属性也没有任何意义。

答案 1 :(得分:0)

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

如果强行使用,浏览器可能会刷新页面本身,但是文件链接并不总是被填充,并且文件是从缓存中提供的。
如果必须多次更改图像,样式表或脚本文件之类的文件,则可以为相应的文件打开一个额外的标签,并首先在包含该文件的页面之前填充该文件。

如果您具有服务器访问权限(在提到nginx时必须假设),则可以将max-age减少到几秒钟,或者为文件设置no-cache标题。然后浏览器将始终提供最新版本。

答案 2 :(得分:0)

更改您的nginx配置以减少到期时间。您会发现ExpiresLast-Modified之间的差异为10天,如配置文件所示。

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