关键在于缓存与负载均衡协同:需统一声明共享缓存区、用$upstream_addr区分后端缓存键、按状态码分级设置时效、并配置容错与后台验证机制。

关键不是“加缓存”,而是让缓存和负载均衡协同工作——既要避免不同后端返回内容不一致导致的缓存错乱,又要保证缓存能真正复用、不过度冗余。
必须定义独立的共享缓存区
缓存区不能依附于某个 upstream 实例,必须在 http 块中统一声明:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:60m inactive=30m max_size=10g use_temp_path=off;-
keys_zone是内存索引区,60MB 可支撑约 120 万缓存条目; -
inactive=30m表示 30 分钟未被访问的缓存自动淘汰,防止冷数据堆积; -
use_temp_path=off关闭临时目录,减少磁盘写入开销。
缓存键必须区分后端节点
默认 proxy_cache_key 不含后端信息,多台服务器响应同一 URL 时会互相覆盖,造成数据错乱。必须显式加入 $upstream_addr:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 推荐写法:
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args $upstream_addr"; - 该变量在反向代理完成后自动填充,值为实际转发到的后端地址(如
10.0.1.5:8080); - 仅能在
location块中使用,不可用于proxy_cache_path等静态上下文。
按状态码和业务特征设置缓存时效
动态接口响应差异大,不能一刀切:
-
proxy_cache_valid 200 302 10m;—— 成功响应缓存 10 分钟; -
proxy_cache_valid 404 1m;—— 404 缓存 1 分钟,避免反复穿透; - 需缓存 POST 请求时,加
proxy_cache_methods POST;,但务必确认接口幂等; - 对高频读、低频变的数据(如配置类接口),可延长至
proxy_cache_valid 200 1h;。
配合容错与后台更新机制
后端波动时,缓存仍要可用、不中断:
-
proxy_cache_use_stale error timeout updating http_502 http_503 http_504;—— 后端异常或正在更新时,仍可返回旧缓存; -
proxy_cache_revalidate on;—— 缓存过期后,自动带If-Modified-Since或If-None-Match向后端验证; -
proxy_cache_min_uses 2;—— 请求至少 2 次才进入缓存,过滤偶然请求,降低无效缓存比例。

















