Plainnotes

proxy_cache 的 key,决定了命中率

2025-05-14 · 3 分钟部署

给静态资源加 nginx 缓存,命中率只有 30%,日志里 MISS 一大堆。多半是 cache key 设计的问题。

默认 key 是 $scheme$proxy_host$request_uri,不同 Host、不同查询串都会算成不同条目。常见的查询串(?v=123、?utm_source=...)会把缓存打散。

按场景定 key:

proxy_cache_key "$scheme$host$uri";          # 忽略查询串
proxy_cache_key "$scheme$host$uri$is_args$args";  # 保留

还要注意 proxy_cache_valid 和上游的 Cache-Control 谁优先。默认 proxy_ignore_headers 为空,上游的 no-cache 会覆盖你的 valid 设置。

调试时在响应头加 $upstream_cache_status,一眼看出 HIT/MISS/BYPASS。