可以在Nginx中为不同请求路径分配独立缓存区,需通过proxy_cache_path定义多个缓存区并用proxy_cache在location中指定;每个缓存区须有唯一keys_zone名、隔离路径及精准作用域;再配合定制cache_key与cache_valid实现路径级缓存策略解耦。

可以在 Nginx 中为不同请求路径分配独立缓存区,核心是结合 proxy_cache_path 定义多个缓存区,并在对应 location 块中用 proxy_cache 指向指定缓存区。关键在于缓存区名称唯一、路径隔离、配置作用域精准。
定义多个互不干扰的缓存区
每个缓存区需有独立的 keys_zone 名称和物理路径,避免共享内存或磁盘空间冲突:
proxy_cache_path /data/nginx/cache/api levels=1:2 keys_zone=api_cache:30m inactive=30m max_size=5g;proxy_cache_path /data/nginx/cache/static levels=1:2 keys_zone=static_cache:10m inactive=7d max_size=50g;proxy_cache_path /data/nginx/cache/admin levels=1:2 keys_zone=admin_cache:20m inactive=1h max_size=2g;
注意:keys_zone 名称(如 api_cache)就是后续引用的标识符,必须全局唯一;max_size 控制该缓存区磁盘上限,inactive 决定冷数据清理周期。
在 location 块中绑定指定缓存区
不同路径通过 location 匹配,各自启用对应缓存区,且所有缓存相关指令(如 proxy_cache_valid、proxy_cache_key)都应放在同一作用域内,防止继承全局配置:
location /api/ { proxy_pass http://backend_api; proxy_cache api_cache; proxy_cache_valid 200 302 5m; }location ~* \.(js|css|png|jpg|gif)$ { proxy_pass http://backend_static; proxy_cache static_cache; proxy_cache_valid 200 302 1d; }location /admin/ { proxy_pass http://backend_admin; proxy_cache admin_cache; proxy_cache_valid 200 302 10m; }
这样,API 接口走小而快的缓存区(短 inactive、高内存占比),静态资源走大容量长时效缓存区,后台路径则单独隔离、快速过期,资源与策略完全解耦。
缓存键与响应控制需路径级对齐
为避免路径间缓存污染,建议按路径特征定制 proxy_cache_key,并配合状态码分级缓存:
- API 路径可加入请求体哈希或特定 header:
proxy_cache_key "$scheme$request_method$host$request_uri$http_x_api_version"; - 静态资源通常只需基础维度:
proxy_cache_key "$scheme$request_method$host$request_uri"; - 用
proxy_cache_valid精确控制各路径常见状态码的缓存时长,例如404一般设为 1–5 分钟,避免错误响应长期滞留。
验证与调试要点
启用缓存状态头便于排查命中情况:
- 在每个
location块中添加:add_header X-Cache-Status $upstream_cache_status; - 响应头中出现
HIT/MISS/EXPIRED即表示缓存生效;若始终为BYPASS,检查是否被proxy_cache_bypass或上游Cache-Control: no-cache干扰。 - 确认缓存文件实际写入对应路径(如
/data/nginx/cache/api/),且共享内存区大小(keys_zone后的:30m)足够容纳该路径的 key 数量(每万 key 约需 1–2MB 共享内存)。


















