nginx反向代理缓存通过proxy_cache_path定义缓存区、location中启用proxy_cache并设置proxy_cache_valid,结合x-cache-status验证,实现静态资源与api响应本地缓存,大幅降低后端负载。

核心思路是让 Nginx 拦在用户和后端之间,把重复、可缓存、可合并的请求消化掉,不让它们全打到后端去。不是简单转发,而是主动“替后端干活”。
用反向代理缓存静态资源和 API 响应
这是最直接有效的减压方式。Nginx 把图片、CSS、JS、JSON 接口返回等资源缓存在本地磁盘或内存里,后续相同请求直接从缓存返回,完全不触达后端。
- 配置 proxy_cache_path 定义缓存存储位置、大小和清理策略,比如:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m; - 在 location 块中启用缓存:
proxy_cache my_cache;并设置不同状态码的缓存时长,例如:proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; - 通过 X-Cache-Status 响应头(如 HIT / MISS / EXPIRED)实时判断缓存是否生效,便于排查和调优
开启 proxy_buffering 控制响应流速
当后端生成响应较快,而客户端网络较慢(比如移动端弱网)时,关闭 buffering 会让 Nginx 一直占着后端连接,拖慢后端释放资源的速度。开启 buffering 后,Nginx 先收完后端响应再发给客户端,后端能快速“脱身”。
- 默认已开启(
proxy_buffering on;),一般无需改动;若需关闭(如流式接口),才显式设为 off - 配合调整 proxy_buffer_size 和 proxy_buffers,避免小响应被截断或大响应溢出缓冲区
- 特别适合处理上传/下载类场景,防止后端线程被慢客户端长期阻塞
用负载均衡分散流量到多个后端实例
单台后端扛不住时,Nginx 可作为流量分发器,把请求按策略(轮询、权重、IP hash 等)打到多台机器上,避免单点过载。
- 用 upstream 块定义服务组,支持健康检查:
upstream backend { server 10.0.1.10:8080 max_fails=3 fail_timeout=30s; server 10.0.1.11:8080 backup; } - 在 location 中通过
proxy_pass http://backend;转发,Nginx 自动完成选节点、重试、剔除故障机 - 搭配 proxy_next_upstream 设置哪些错误触发重试(如 error、timeout、http_500),提升容错能力
缓存失效期的柔性应对策略
缓存一过期,大量并发请求同时回源,容易击穿后端。Nginx 提供两种“软着陆”机制:
- proxy_cache_lock:同一资源只允许一个请求回源,其余等待命中新缓存,避免重复拉取
-
proxy_cache_use_stale:允许在缓存过期、后端异常或更新中时,仍用旧缓存响应客户端,同时后台静默更新(配合
proxy_cache_background_update on;) - 例如:
proxy_cache_use_stale error timeout updating http_500;,既保可用性,又削峰











