【发布时间】:2013-11-15 19:26:55
【问题描述】:
我试图告诉 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;
}
我希望这会导致响应 HTTP 代码 304“未修改”,但我得到的是每次都一致的 HTTP 200(OK)。
我尝试了一些其他的方法,例如:
a) 将修改时间显式设置为过去的恒定时间点;
add_header Last-Modified "Thu, 01 Jan 1970 00:00:00 GMT";
b) 切换到If-None-Match 检查;
add_header ETag $1;
if_modified_since off;
但是,唯一真正按需要起作用的是:
add_header Last-Modified "Thu, 01 Jan 2030 00:00:00 GMT";
if_modified_since before;
我迷路了。这与我认为正确的一切背道而驰。请帮忙。
【问题讨论】:
标签: http caching nginx last-modified if-modified-since