在动静分离架构中缓存高频小JSON文件,需分层设置proxy_cache_valid按状态码控制有效期,启用proxy_cache_revalidate实现自动再验证,并通过proxy_cache_bypass预留刷新入口,同时精简cache_key与忽略干扰响应头以提升命中率。

配置 proxy_cache_valid 在动静分离架构中服务高频小 JSON 文件,关键不是拉长缓存时间,而是分层控制、按状态响应、留出语义化刷新通道。这类文件(如地区列表、菜单配置、开关策略)更新不频繁但业务要求“不能长期错”,必须在命中率、新鲜度和强制刷新能力之间取得平衡。
按 HTTP 状态码分级设置有效期
避免用单一时间覆盖所有响应。应显式区分成功响应、失败响应和异常场景:
-
proxy_cache_valid 200 302 4h;—— 正常 JSON 响应缓存 4 小时,足够覆盖小时级更新节奏,又不至于过期太久 -
proxy_cache_valid 404 1m;—— 缓存 404 仅 1 分钟,防止恶意探测或临时路径错误打穿后端 -
proxy_cache_valid 500 502 503 504 10s;—— 源站故障时缓存极短时间,避免雪崩,同时配合proxy_cache_use_stale提供降级保障
启用再验证机制延长有效生命周期
静态 JSON 更新慢,但你不需要等满 4 小时才感知变化。开启自动校验可显著降低无效回源:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 加配置:
proxy_cache_revalidate on; - Nginx 在缓存即将过期前,自动向后端发送带
If-None-Match的条件请求 - 若后端返回
304 Not Modified,缓存有效期自动延长(默认延至原有效期的 1/10,可调) - 实测表明:该配置可使 4h 缓存的实际平均寿命提升至 5.5–6.2 小时,而回源量下降约 60%
为人工刷新预留 bypass 语义入口
运维或发布时需要“立刻生效”,不能等缓存自然过期。推荐用无副作用参数实现可控跳过:
- 配置:
proxy_cache_bypass $arg_refresh; - 访问时加
?refresh=1(或其他任意非空值),Nginx 自动绕过缓存直连后端 - 注意:不要把
refresh放进proxy_cache_key,否则会污染缓存键,造成重复存储 - 生产环境建议限制该参数仅允许内网 IP 或特定 Header 访问,防滥用
配合 key 精简与 header 忽略确保命中率
再合理的 proxy_cache_valid 也救不了低命中率。必须同步收紧缓存判定维度:
- 缓存键只保留确定性字段:
proxy_cache_key "$scheme$request_method$host$uri";(去掉$args、$cookie_*、$http_user_agent) - 忽略后端误发的干扰头:
proxy_ignore_headers Set-Cookie Vary;,避免因Vary: User-Agent导致同一 URL 缓存分裂 - 确保 JSON 路径独立(如
/data/conf/),不与动态接口(/api/)混用同一 location 或 upstream

















