Nginx代理缓存静态资源需合理配置缓存区域、绑定策略、控制失效与更新机制,并通过响应头监控命中状态。

用Nginx代理缓存静态资源,能显著降低后端压力、减少重复请求、提升用户访问速度。关键不在“开不开缓存”,而在于缓存策略是否匹配业务场景——比如资源更新频率、CDN协同方式、缓存失效控制等。
配置基础代理缓存区域
Nginx缓存需先定义共享内存区域(用于存储缓存元数据),再指定磁盘路径存放实际文件:
- 在http块中添加:
proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:10m max_size=1g inactive=1d use_temp_path=off;
其中static_cache是缓存区名称,供后续指令引用;inactive=1d表示1天未被访问的缓存自动清理。 - use_temp_path=off避免写临时文件,提升IO效率,推荐开启。
为静态资源启用并精准控制缓存行为
在location或server块中针对CSS/JS/IMG等后缀启用缓存,并设置合理过期逻辑:
- 使用
proxy_cache static_cache;绑定缓存区; - 用
proxy_cache_valid按状态码设定缓存时间,例如:proxy_cache_valid 200 302 1h;proxy_cache_valid 404 1m; - 对不希望缓存的请求(如带参数的资源),可用
proxy_cache_bypass $args;跳过缓存; - 配合
expires或add_header Cache-Control向客户端透传缓存策略,避免浏览器反复拉取。
确保缓存内容准确且及时更新
静态资源更新后,旧缓存若未失效,用户将看到陈旧内容。需结合多种机制保障一致性:
- 资源名带哈希(如
app.a1b2c3.js)是最稳妥方式——文件变则URL变,天然绕过缓存; - 若无法改名,可通过
proxy_cache_purge模块(需编译时启用)配合脚本主动清除特定缓存; - 利用
proxy_cache_lock on;防止高并发下多个请求同时回源生成重复缓存; - 通过
proxy_cache_revalidate on;支持条件GET(If-None-Match/If-Modified-Since),让Nginx在缓存过期前先向后端确认是否需要更新。
监控与调优缓存命中效果
光配不看等于没配。需验证缓存是否真正生效:
- 添加响应头便于调试:
add_header X-Cache-Status $upstream_cache_status;,返回值可能是HIT、MISS、BYPASS或EXPIRED; - 用
nginx -t检查语法,nginx -s reload热加载配置; - 观察/var/cache/nginx/static目录文件增长、proxy_cache_use_stale是否缓解后端抖动、日志中$upstream_response_time是否明显下降。











