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)
我迷路了.这与我认为正确的一切相反.请帮忙.
您应该更改您的互联网,因为它们会给您错误的建议.
只需删除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/expires和http://tools.ietf.org/html/rfc2616