Nginx中应通过变量驱动缓存策略:用map按域名动态设置keys_zone、cache_key、cache_valid、cache_bypass及no_cache,实现业务线级隔离与差异化控制,并通过X-Cache-Status头和独立缓存路径确保可观察性与安全性。

要在 Nginx 中为不同业务线动态调整缓存策略,核心不是写多套配置,而是用变量驱动缓存行为——让 proxy_cache_key、proxy_cache_valid、proxy_cache_bypass 等指令根据请求来源(如域名、路径前缀、Header、参数)自动选择对应逻辑。
按业务线区分缓存区域与键值
不同业务线应使用独立的 keys_zone,避免缓存键冲突和互相污染。例如:
- 电商线用
keys_zone=ecom_cache:20m - 内容资讯线用
keys_zone=info_cache:15m - 后台管理线不缓存,或用极短生命周期的
admin_cache:2m
再配合 map 指令将业务标识映射为缓存区名称和缓存键模板:
map $host $cache_zone {
~^shop\.example\.com$ ecom_cache;
~^news\.example\.com$ info_cache;
~^admin\.example\.com$ admin_cache;
default default_cache;
}
map $host $cache_key_base {
~^shop\.example\.com$ "$scheme$request_method$host$request_uri$is_args$args$http_cookie";
~^news\.example\.com$ "$scheme$request_method$host$request_uri";
~^admin\.example\.com$ "$scheme$request_method$host$request_uri$arg_token";
default "$scheme$request_method$host$request_uri";
}
这样在 location 中就能动态调用:
proxy_cache $cache_zone; proxy_cache_key $cache_key_base;
按业务线设置差异化缓存时效
不能只靠全局 proxy_cache_valid,需结合 map 生成响应码级的过期时间变量:
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
map $host $cache_valid_200 {
~^shop\.example\.com$ "30m";
~^news\.example\.com$ "2h";
~^admin\.example\.com$ "10s";
default "10m";
}
map $host $cache_valid_404 {
~^shop\.example\.com$ "1m";
~^news\.example\.com$ "5m";
default "30s";
}
然后在 location 中使用:
proxy_cache_valid 200 $cache_valid_200; proxy_cache_valid 404 $cache_valid_404; proxy_cache_valid 301 302 10m;
按业务线控制缓存绕过与禁止写入
各业务线对调试、登录态、灰度流量的处理方式不同,绕过逻辑也需隔离:
- 电商线:跳过含
X-Debug: 1或?preview=1的请求 - 资讯线:跳过带
Cookie: user_role=editor的编辑请求 - 后台线:所有请求默认绕过读缓存,且禁止写入(加
proxy_no_cache 1)
统一用 map 收口:
map $host $skip_cache_flag {
~^shop\.example\.com$ "$http_x_debug $arg_preview";
~^news\.example\.com$ "$cookie_user_role ~editor";
~^admin\.example\.com$ "1";
default "0";
}
map $host $no_cache_flag {
~^admin\.example\.com$ "1";
default "$http_x_no_cache $arg_nocache";
}
再在 location 中启用:
proxy_cache_bypass $skip_cache_flag; proxy_no_cache $no_cache_flag;
验证与隔离建议
每条业务线的缓存行为必须可观察、可隔离:
- 用
add_header X-Cache-Status "$upstream_cache_status ($cache_zone)";标记命中状态和归属区域 - 各
proxy_cache_path使用不同磁盘路径(如/var/cache/nginx/ecom、/var/cache/nginx/info),避免混用 - 对管理类业务线,建议额外加
proxy_cache_lock off;和proxy_cache_use_stale off;,彻底关闭缓存依赖

















