可通过map+多proxy_cache_path+动态proxy_cache实现按业务路径精准分流缓存:如/order/→order_cache、/static/→static_cache等,并为各缓存区配置差异化参数,配合location动态启用及配套运维策略。

可以配置多个缓存区,关键在于按业务特征做区分,而不是简单堆叠路径。Nginx 本身不支持“自动识别业务类型并分配缓存区”,但通过 map + 多 proxy_cache_path + 动态 proxy_cache 组合,就能实现精准分流与差异化管理。
按业务路径预判,用 map 打标缓存区
业务流量往往有明确的 URL 规律,比如 /api/order/ 属于订单服务,/static/ 属于前端静态资源,/admin/ 属于后台管理接口。利用这些路径特征,在 http 块中定义 map 变量,把请求映射到对应缓存区名称:
-
~^/api/order/→order_cache -
~^/api/payment/→pay_cache -
~^/static/→static_cache -
~^/admin/→admin_cache - 未匹配路径默认设为
no_cache,避免误缓存
为每类业务定义专属缓存区参数
不同业务对缓存的要求差异很大:静态资源需高并发读取、频繁更新;订单接口响应体小但敏感,需短时效;后台页面访问频次低但内容稳定,适合长保留。因此每个缓存区应独立配置:
-
static_cache:内存区 100m(支撑海量 key 查找),inactive=10m,max_size=20g,适配高频小文件 -
order_cache:内存区 20m,inactive=5m,proxy_cache_valid 200 60s,强调时效性 -
pay_cache:额外启用proxy_cache_lock on,防止重复支付请求穿透缓存 -
admin_cache:inactive=24h,max_size=2g,减少后台服务器压力
在 location 中动态启用对应缓存区
不要在 server 级别统一开启缓存,而应在具体 location 块里根据 map 结果选择缓存区。这样既避免策略冲突,又便于后续按业务灰度开关:
- location 块内写
proxy_cache $cache_zone;(引用 map 定义的变量) - 配合
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";,确保相同请求打到同一缓存项 - 对 admin 或 pay 类路径,可叠加
proxy_cache_bypass $arg.nocache,支持带参数强制刷新
配套策略让多缓存区真正可用
光有分区还不够,得配上运维和安全控制:
- 各缓存目录物理隔离(如
/data/nginx/cache/order、/data/nginx/cache/static),方便单独清理或监控磁盘使用 - 用
log_format在 access_log 中记录$cache_zone和$upstream_cache_status,便于分析命中率与业务分布 - 对敏感业务(如含用户身份的 API),在 upstream 返回头中加
Cache-Control: private,再配合proxy_ignore_headers Cache-Control统一管控


















