nginx层缓存后端接口是最高效零侵入减负方式,需筛选稳定、低频、高开销接口;精准定义缓存键与绕过规则;设置分级有效期与失效缓冲;启用合并回源与缓存锁。

直接在 Nginx 层缓存后端接口响应,是最高效、零侵入的减负方式。它让大量重复请求止步于 Nginx,不触发后端代码执行、数据库查询或模板渲染,CPU 和带宽压力同步下降。
只缓存真正适合的接口
不是所有 API 都该进缓存,关键看三点:结果是否稳定、更新是否低频、计算是否昂贵。比如:
- 商品详情页(静态化页面,数小时不变)
- 天气聚合接口(每15分钟更新一次,允许短暂延迟)
- 销售排行榜报表(含多表 JOIN 和 GROUP BY,缓存10分钟可降低80%数据库负载)
而带登录态、AB测试标识、实时聊天消息等强个性化响应,必须排除在外。
精准定义缓存键与绕过规则
缓存键(proxy_cache_key)决定“什么算同一个请求”。默认值易受 Cookie、User-Agent 干扰,应显式剔除:
proxy_cache_key "$scheme$request_method$host$request_uri";
同时用 proxy_cache_bypass 主动跳过敏感请求:
proxy_cache_bypass $http_cookie $arg_user_id $arg_debug;
这样带用户身份参数或调试标记的请求,一律不进缓存,避免数据污染。
设置分级有效期与失效缓冲
缓存时间要匹配业务节奏。例如:
- 200/302 响应缓存10分钟:proxy_cache_valid 200 302 10m;
- 404 错误只缓存1分钟,防止错误长期滞留:proxy_cache_valid 404 1m;
- 缓存即将过期时,用 proxy_cache_use_stale updating; 让 Nginx 在后台悄悄刷新,主请求仍返回旧内容,避免并发回源打垮后端。
启用合并回源与缓存锁
当缓存集体失效(如重启后),大量相同请求会同时涌向后端。开启 proxy_cache_lock 可解决:
- 首个请求去后端取新内容并写入缓存
- 其余并发请求等待,命中新建缓存后立即返回
- 配合 proxy_cache_lock_timeout 5s; 防止无限等待
这能将原本上百次的回源压到1次,对热点接口效果尤为明显。











