immutable
`immutable` 指令设置静态资源的缓存行为,启用 `immutable` 缓存控制属性以提升性能。
说明
immutable 指令在 NGINX 中用于增强静态资源的缓存策略,尤其适用于通过版本化 URL 实现缓存失效(cache-busting)的方法的 Web 框架。当启用此指令时,服务器对静态资源的请求会返回包含 Cache-Control 指令并设置为 immutable 的 HTTP 头,以及一个远期的 Expires 头。这告诉浏览器和中间缓存该资源不会改变,因此可以有效地缓存,而无需在每次请求时重新验证该资源。
immutable 指令可用于多个上下文,包括 http、server 和 location,并接受一个用于启用或禁用指令的单一参数标志。通过设置 immutable on;,NGINX 会将响应配置为同时包含 max-age 指令(设置为 1 年)和 immutable 属性,从而更好地利用缓存内容。该指令还确保 Expires 头仅在 HTTP/1.0 请求中传输,因为较新的 HTTP 版本通过使用 Cache-Control 更高效地处理缓存。
将资源标记为 immutable 后,NGINX 允许浏览器无限期地缓存这些资源,从而优化静态内容的交付性能。对于像单页应用和那些频繁更新资源但不改变其 URL 的框架来说,这一点尤为有用。此外,可以将 stale-while-revalidate 和 stale-if-error 值附加到 Cache-Control 头上,以在特定浏览器条件下减轻缓存未命中的影响,从而使缓存机制更为稳健。
配置示例
http {
server {
location /static/ {
immutable on;
}
}
}确保底层静态资源确实不会更改,因为将它们标记为 immutable 如果在不更改 URL 的情况下更新,可能导致提供过时的内容。还应验证浏览器对 immutable 指令的支持,因为不同浏览器的行为可能有所不同。请注意,旧版浏览器可能不识别 immutable 指令,从而导致回退行为。
如果与其他缓存指令一起使用,确保它们与 immutable 不冲突,以避免意外的缓存问题。