了解 NGINX 默认缓存
Understanding NGINX default caching
我有一个不同位置的 NGINX 配置。他们都是return个人index.html
。 index.html
s 是在每次部署时构建的。它们包括 JavaScript 文件的 script
标签,这些文件在文件名中带有内容哈希,以破坏缓存。
我的问题是,在部署之后,一些必需的脚本正在 404
ing 因为下载的 index.html
在 JS 文件名中有旧的内容散列。好像是方式的问题,送的index.html
,因为客户端下载的是老版本的index.html
这是我的 NGINX 配置中的示例位置:
location /my-route {
try_files $uri /my-route/index.html;
}
当我检查响应 header 时,我看到所有 index.html 文件的 ETag。这还不足以确保所有 index.html
个文件的正确缓存行为吗?
我的下一个方法是添加一个 Cache-Control
header。但我不知道它是否能解决我的问题,因为我无法确切解释为什么它是正确的解决方案(但我想了解它)。
location /my-route {
add_header Cache-Control "must-revalidate";
try_files $uri /my-route/index.html;
}
为了使 cache-busting 策略适用于链接资产(JavaScript 文件等),按照您描述的方式,您需要确保浏览器始终具有 index.html.
这是实现您需要的一种保守方法。
为 HTML 文件设置一个 location
块,为文件名中包含内容哈希的其他资产设置一个单独的位置块。对于 HTML 个文件,您需要:
add_header Cache-Control "no-store";
对于文件名中包含内容哈希的资产,请使用:
add_header Cache-Control "max-age: 31536000";
要回答关于在 index.html 文件上发送 ETag 是否足够的问题,答案是否定的。如果没有 Cache-Control header ,浏览器会使用自己的算法来决定是从自己的缓存中检索还是使用 If-None-Match 请求 header 来验证他们已经存在的副本有。
注意:我不熟悉 try_files,但您需要确保如果 try_files 在内部重定向到不同的位置块,则该最终位置块添加正确的 headers.
我有一个不同位置的 NGINX 配置。他们都是return个人index.html
。 index.html
s 是在每次部署时构建的。它们包括 JavaScript 文件的 script
标签,这些文件在文件名中带有内容哈希,以破坏缓存。
我的问题是,在部署之后,一些必需的脚本正在 404
ing 因为下载的 index.html
在 JS 文件名中有旧的内容散列。好像是方式的问题,送的index.html
,因为客户端下载的是老版本的index.html
这是我的 NGINX 配置中的示例位置:
location /my-route {
try_files $uri /my-route/index.html;
}
当我检查响应 header 时,我看到所有 index.html 文件的 ETag。这还不足以确保所有 index.html
个文件的正确缓存行为吗?
我的下一个方法是添加一个 Cache-Control
header。但我不知道它是否能解决我的问题,因为我无法确切解释为什么它是正确的解决方案(但我想了解它)。
location /my-route {
add_header Cache-Control "must-revalidate";
try_files $uri /my-route/index.html;
}
为了使 cache-busting 策略适用于链接资产(JavaScript 文件等),按照您描述的方式,您需要确保浏览器始终具有 index.html.
这是实现您需要的一种保守方法。
为 HTML 文件设置一个 location
块,为文件名中包含内容哈希的其他资产设置一个单独的位置块。对于 HTML 个文件,您需要:
add_header Cache-Control "no-store";
对于文件名中包含内容哈希的资产,请使用:
add_header Cache-Control "max-age: 31536000";
要回答关于在 index.html 文件上发送 ETag 是否足够的问题,答案是否定的。如果没有 Cache-Control header ,浏览器会使用自己的算法来决定是从自己的缓存中检索还是使用 If-None-Match 请求 header 来验证他们已经存在的副本有。
注意:我不熟悉 try_files,但您需要确保如果 try_files 在内部重定向到不同的位置块,则该最终位置块添加正确的 headers.