静态资源缓存需权衡内容变频、用户敏感度、更新机制和访问路径,核心标准是性能收益是否大于时效性风险与运维复杂度;按更新频率分三级:长期不变资源用max-age=31536000, immutable;低频变更设5–30分钟并配合主动失效或版本化路径;高频/个性化内容禁用缓存。

静态资源缓存不是“开或关”的选择题,而是围绕内容变频、用户敏感度、更新机制和访问路径做的一系列权衡。核心取舍标准就一条:缓存带来的性能收益,是否大于它引发的时效性风险和运维复杂度。
按内容更新频率决定缓存时长
更新越慢的内容,缓存越激进;反之必须克制。
-
长期不变资源(JS/CSS/字体/图标):用
max-age=31536000, immutable。immutable 能让浏览器彻底跳过协商请求,哪怕 URL 带参数也不会误判为新资源。 -
低频变更内容(如商品详情页 HTML、活动页):设为 5–30 分钟,配合后端主动失效(如 PURGE 请求)或版本化路径(
/v2.1/home.html),避免依赖缓存过期被动清理。 -
高频/个性化内容(含用户昵称的首页、登录态弹窗):禁用缓存,用
proxy_no_cache $cookie_user_id或add_header Cache-Control "no-store",防止跨用户信息泄漏或状态错乱。
按访问来源与终端类型差异化控制
同一份资源,对不同用户群体的价值和容忍度不同。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
移动端资源(尤其 APP 内嵌 H5):建议缩短
inactive时间(如 15–30 分钟),因热更新频繁,旧缓存堆积易导致白屏或样式错乱;可结合$http_user_agent判断并单独设置proxy_cache_valid。 -
内部员工访问(如 IP 段 10.0.0.0/8):可关闭缓存或设极短有效期(
1m),方便调试与即时验证发布效果。 -
CDN 回源流量:若 Nginx 位于 CDN 下游,应避免重复缓存。可通过
proxy_cache_bypass $http_x_forwarded_for让 CDN 请求直通后端,由 CDN 统一管理缓存层级。
按响应特征与业务语义划分缓存区
混用一个缓存区容易互相挤占空间,也难做精细化回收。
-
分离动静态缓存区:用
proxy_cache_path定义多个keys_zone,例如static_cache存图片/JS,api_cache存只读接口,各自设置max_size和inactive。 -
区分内容类型设置缓存键:对多语言站点,
proxy_cache_key必须包含$http_accept_language;对带灰度标识的请求,可加入$http_x_release_version,避免新老版本内容在缓存中混杂。 -
排除干扰参数:用
map指令清洗$args,过滤utm_*、fbclid等跟踪参数,否则同一个资源因参数不同生成多个缓存副本,命中率骤降。
按部署方式与更新节奏匹配缓存策略
缓存策略必须和服务发布方式对齐,否则会放大发布风险。
-
URL 版本化部署(推荐):每次构建生成带哈希的文件名(
app.a1b2c3.js),则可对所有静态资源启用一年缓存,无需担心更新不生效。 -
覆盖式部署(无版本号):必须禁用 HTML 缓存,并对 JS/CSS 设置较短
max-age(如 1 小时),同时开启proxy_cache_use_stale updating,保证后台更新时前端仍能返回旧缓存,避免空白页。 -
灰度发布场景:用 Cookie 或 Header 标识用户分组,通过
map控制是否进入缓存(proxy_no_cache $is_gray_user),确保灰度用户始终看到最新逻辑,非灰度用户走稳定缓存流。










