nginx中需精准配置location与proxy_cache协同工作:限定只读get接口缓存,定制proxy_cache_key排除动态参数并支持多维度区分,结合proxy_cache_valid、proxy_cache_use_stale及proxy_cache_lock实现分级缓存与容错,辅以proxy_cache_bypass和proxy_cache_purge支持绕过与主动刷新。

在 Nginx 中,用 location 块配合 proxy_cache 缓存后端接口响应,关键在于精准匹配请求、控制缓存策略、避免缓存污染。不是所有接口都适合缓存,也不是加个 proxy_cache 就能生效——必须结合 proxy_cache_key、proxy_cache_valid、缓存绕过与刷新逻辑一起配置。
明确 location 匹配范围,避免缓存误伤
缓存应只作用于读接口(如 GET),且需排除带敏感参数或用户标识的路径。推荐用前缀匹配 + 精确限定方法:
- 用
location ^~ /api/v1/products/匹配商品列表类只读接口,不触发正则回溯 - 拒绝缓存含 query 参数
token=、user_id=或 POST/PUT 请求,可在 location 内加if ($request_method != GET) { proxy_cache_bypass 1; } - 避免用
location /全局启用缓存,否则静态资源、管理后台、健康检查等可能被意外缓存
定制 proxy_cache_key,确保缓存键唯一且安全
默认缓存键是 $scheme$proxy_host$request_uri,但接口常依赖 header(如 Accept-Language)或特定 query 参数(如 page、sort)。需显式定义:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 基础写法:
proxy_cache_key "$scheme://$host$request_uri$is_args$args"; - 若需按语言区分缓存:
proxy_cache_key "$scheme://$host$request_uri$is_args$args|$http_accept_language"; - 排除动态参数(如
ts=123456):先用map清洗$args,再拼入 key
设置合理的缓存有效期与分层校验
接口缓存不能只靠固定时间,要结合后端返回的 Cache-Control 和自定义规则:
- 用
proxy_cache_valid 200 302 10m;设定成功响应默认缓存 10 分钟 - 允许后端通过响应头覆盖:
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;提升容错性 - 开启
proxy_cache_lock on;防止缓存失效时大量穿透请求打到上游 - 对高频变动数据(如实时价格),可设为
1s并搭配proxy_cache_lock_age 1s;控制锁周期
支持主动刷新与条件绕过
上线新版本或数据变更时,需要清缓存;调试阶段也需临时跳过缓存:
- 用
proxy_cache_bypass $arg_nocache $cookie_nocache;支持加?nocache=1或设 cookie 绕过 - 配合
proxy_cache_purge模块(需编译时启用)实现按 key 删除,例如location ~ /purge(/.*) { proxy_cache_purge cache_name "$scheme://$host$1$is_args$args"; } - 禁止外部直接调用 purge 接口,用
allow 127.0.0.1;+deny all;限制访问来源
不复杂但容易忽略:缓存生效的前提是后端响应头未显式声明 Cache-Control: no-cache 或 Set-Cookie ——Nginx 默认不缓存带 Cookie 的响应,如有需要,得加 proxy_ignore_headers Cache-Control Set-Cookie; 并自行承担风险。










