无限期地通过Nginx缓存HTTP响应失败

kru*_*kid 2 caching http nginx last-modified if-modified-since

我试图告诉nginx永远缓存我的一些资产(js,css),或者至少在很长一段时间内.

这个想法是,一旦资产包被编译并使用/assets/URI前缀(例如/assets/foo-{fingerprint}.js)发布,它就会保留在那里并且不需要改变.

互联网告诉我,我应该写下面的规则:

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
  gzip_static on; # there's also a .gz of the asset
  expires max;
  add_header Cache-Control public;
  add_header Last-Modified "";
  add_header ETag "";
  break;
}
Run Code Online (Sandbox Code Playgroud)

我希望这会导致HTTP代码304"未修改"的响应,但我得到的是每次都是一致的HTTP 200(OK).

我尝试了其他一些方法,例如:

a)明确将修改时间设置为过去的恒定时间点;

add_header Last-Modified "Thu, 01 Jan 1970 00:00:00 GMT";
Run Code Online (Sandbox Code Playgroud)

b)改用If-None-Match支票;

add_header ETag $1;
if_modified_since off;
Run Code Online (Sandbox Code Playgroud)

然而,唯一真正起作用的是:

add_header Last-Modified "Thu, 01 Jan 2030 00:00:00 GMT";
if_modified_since before;
Run Code Online (Sandbox Code Playgroud)

我迷路了.这与我认为正确的一切相反.请帮忙.

VBa*_*art 6

您应该更改您的互联网,因为它们会给您错误的建议.

只需删除add_header您所在位置的所有行(以及剩余行brake):

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
   gzip_static on; # there's also a .gz of the asset
   expires max;
}
Run Code Online (Sandbox Code Playgroud)

并阅读真实互联网上的文档:http://nginx.org/r/expireshttp://tools.ietf.org/html/rfc2616