proxy_cache 的 key,决定了命中率
给静态资源加 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。