应按后缀精准缓存静态资源:对.jpg、.png、.css、.js等通用性强、更新少的文件启用独立cache zone与长时效(7d),禁用Set-Cookie,忽略参数缓存,配置stale兜底与cache lock防雪崩,并通过日志监控命中率。

明确缓存目标:哪些后缀适合单独缓存
图片、样式表、脚本这类静态资源更新频率低、通用性强,是缓存收益最高的对象。常见可缓存后缀包括 .jpg、.png、.gif、.css、.js、.woff2、.svg 等。它们不依赖用户身份或会话状态,响应内容稳定,天然适配 Nginx 的基于 URI 的缓存机制。
注意避开动态后缀如 .php、.jsp、.asp —— 即使它们返回静态内容,也需额外校验(如通过 proxy_cache_bypass 和 proxy_no_cache 控制),否则易造成数据错乱。
按后缀精准分流并启用缓存
利用正则匹配的 location ~* \.(...)$ 块,把请求直接导向专用缓存路径,绕过通用代理逻辑。关键点在于:不加尾部斜杠、不带重写、不混用 proxy_pass 后缀补全逻辑。
location ~* \.(jpg|jpeg|png|gif|webp|css|js|woff2|ttf|svg)$ {- 使用独立缓存区(如
proxy_cache static_cache),避免与动态内容共用 key zone - 设置长且确定的缓存时效:
proxy_cache_valid 200 301 302 7d; - 添加强缓存头:
add_header Cache-Control "public, max-age=604800"; - 禁用不必要头传递:
proxy_hide_header Set-Cookie;(防止后端误设 cookie 干扰缓存)
缓存路径与键值设计要隔离
为静态后缀单独定义缓存路径,提升管理粒度和清理可控性:
- 在
http块中声明:proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:50m max_size=2g inactive=30d; -
keys_zone名称必须与proxy_cache指令一致,大小建议 ≥10MB/万级 key - 避免用
$host或$cookie_xxx作为proxy_cache_key成分——静态资源无需区分域名或用户,用默认$scheme$proxy_host$request_uri即可 - 若需忽略参数缓存(如
?v=123),可自定义 key:proxy_cache_key "$scheme$proxy_host$uri";
异常与穿透控制不能少
即使针对静态文件,也要预设后端不可用时的行为,保障服务连续性:
- 启用陈旧缓存兜底:
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504 updating; - 防缓存雪崩:
proxy_cache_lock on;+proxy_cache_lock_timeout 5s; - 主动跳过缓存的场景(如调试时加
?nocache=1):proxy_cache_bypass $arg_nocache; - 配合日志观察命中率:
log_format cache '$remote_addr - $upstream_cache_status $request';


















