Nginx是大型架构核心,下面我详解Nginx 缓存性能实战@mikechen
Nginx 缓存
Nginx 缓存,是提升 Web 服务性能的重要手段之一。
在高并发访问场景中,缓存能够有效减少后端应用与数据库压力,显著缩短响应时间,甚至带来数量级的性能提升。

比如:大量请求的内容具有重复性,例如静态资源、页面片段、接口响应等。
如果每次都回源处理,不仅浪费计算资源,还会增加后端故障风险。
通过缓存,Nginx 可以直接从本地磁盘或内存中返回结果,大幅降低响应延迟。
Nginx 缓存核心机制
Nginx 缓存核心机制以及原理,主要包括缓存键、缓存过期、缓存刷新和缓存淘汰。

Nginx 会根据请求 URL、参数、Header 等生成缓存键,并将上游响应存储到缓存目录中。
当相同请求再次到来时,若缓存未过期,则直接命中返回。
若已过期,则可能触发回源更新,该机制兼顾了性能与数据一致性。
Nginx 缓存配置实战
在生产级配置实战以及调优方面,需要重点关注缓存路径规划、缓存大小、过期策略、缓存锁、缓存预热和错误回源等参数。

http {
# 1. 定义缓存轨道 proxy_cache_path
# path: 磁盘存储路径
# levels: 目录分级(1:2 表示两级子目录)
# keys_zone: 共享内存名称及大小(10m 可存约 8万个 Key)
# max_size: 磁盘最大缓存上限(超过后 Cache Manager 触发 LRU 清理)
# inactive: 10分钟内未被访问的数据自动剔除(无论是否过期)
# use_temp_path=off: 直接写入最终目录,避免跨分区 rename 开销
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:20m max_size=10g inactive=10m use_temp_path=off;
upstream backend_service {
server 10.0.0.10:8080 weight=5 max_fails=2 fail_timeout=10s;
server 10.0.0.11:8080 weight=5 max_fails=2 fail_timeout=10s;
keepalive 32; # 保持长连接,极大提升回源性能
}
server {
listen 80;
server_name api.example.com;
# 添加响应头,方便 Debug 调试缓存命中状态
add_header X-Cache-Status $upstream_cache_status;
location /api/goods/ {
# 2. 启用缓存规则
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
# 3. 针对不同 HTTP 状态码设置缓存时间
proxy_cache_valid 200 302 5m;
proxy_cache_valid 404 1m;
# 4. 防击穿:只允许一个并发请求回源
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
# 5. 容灾降级:后端故障/超时/5xx 时使用过期缓存响应
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 6. 设置最少访问次数才触发缓存(防冷门数据污染)
proxy_cache_min_uses 1;
# 7. 忽略部分限制缓存的 Header(按需配置)
# 默认情况下,后端如果返回 Set-Cookie 或 Cache-Control: no-cache,Nginx 不会缓存
proxy_ignore_headers Set-Cookie Cache-Control Expires;
proxy_hide_header Set-Cookie;
# 代理转发
proxy_pass http://backend_service;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
例如,可通过合理设置 proxy_cache_path、proxy_cache_valid、proxy_cache_lock 来提升命中率并避免缓存击穿。
同时,还应结合业务特点区分强一致数据与可容忍短暂延迟的数据,避免“一刀切”式缓存策略。
总体而言,Nginx 缓存的价值不仅在于加速,更在于削峰、降载和保护后端系统,是高性能架构中不可或缺的一环。