Nginx是大型架构核心,下面我详解Nginx缓存原理@mikechen
Nginx缓存
在高并发架构中,Nginx不仅是流量调度的“网关之王”,更是系统性能优化的“隐藏王牌”。
得益于其强大的缓存机制,Nginx可以显著降低后端服务器压力,让接口响应速度提升至原来的10倍以上。
Nginx缓存是指:Nginx在本地磁盘或内存中保存后端响应内容。
下一次相同请求直接返回缓存结果,而无需再次访问后端。

简单来说,它让Nginx“有记忆”。
当一个请求被缓存后,再有相同请求时,Nginx直接在本地返回数据,就像CDN一样快。
Nginx缓存原理
Nginx缓存的工作原理,可以概括为“请求拦截 → 缓存检索 → 内容响应 → 状态回写”四步。

1️⃣ 请求拦截阶段
当客户端发起请求时,Nginx首先判断该请求是否启用缓存(即是否命中 proxy_cache、fastcgi_cache 等规则)。
若命中,则进入缓存检索逻辑;否则正常转发至后端。
2️⃣ 缓存检索阶段
Nginx会根据配置生成缓存Key(通常是请求的URL、Host、参数等组合):
proxy_cache_key $scheme$proxy_host$request_uri;然后在本地缓存目录中查找对应缓存文件:
/var/cache/nginx/1/2/abcd1234…
若缓存存在且未过期 → 直接命中(HIT)
若缓存不存在或已过期 → 进入后端请求阶段(MISS)
3️⃣ 内容响应阶段
命中缓存:Nginx直接从本地磁盘/内存中读取缓存文件返回客户端,速度极快(通常毫秒级)。
未命中缓存:Nginx将请求转发给后端服务器(如Tomcat、PHP-FPM)。
后端生成响应后,Nginx会同时:把响应内容返回给客户端;
把结果写入缓存目录,供下次使用。
Nginx缓存配置
要让Nginx缓存真正“发挥极致性能”,必须掌握以下四大核心配置。

1.定义缓存存储区
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:100m max_size=10g inactive=60m use_temp_path=off;
参数详解:
| 参数 | 作用 |
|---|---|
levels=1:2 |
定义多级目录结构,避免单目录文件过多 |
keys_zone=cache_zone:100m |
定义缓存元数据存放区(内存100MB) |
max_size=10g |
限制磁盘最大缓存容量 |
inactive=60m |
文件1小时未访问则清理 |
use_temp_path=off |
直接写缓存目录,提升I/O性能 |
2.启用代理缓存
location /api/ {
proxy_pass <http://backend>;
proxy_cache cache_zone;
proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
关键点说明:
proxy_cache_valid:定义缓存时长;
proxy_cache_key:确保相同请求生成相同缓存;
X-Cache-Status:方便查看缓存命中情况。
实际效果:
热点接口响应时间从 250ms → 25ms,后端QPS降低90%,吞吐量提升10倍。
3.启用微缓存
location /hot {
proxy_pass <http://backend>;
proxy_cache cache_zone;
proxy_cache_valid 200 2s;
proxy_cache_lock on;
}
每个接口响应缓存2秒;
防止突发流量“打穿后端”;
proxy_cache_lock on 避免缓存失效瞬间的并发雪崩。
适用场景:秒杀抢购、榜单接口、新闻热点。
4.启用FastCGI缓存(动态内容加速)
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=php_cache:100m inactive=30m;
location ~ \\.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_cache php_cache;
fastcgi_cache_valid 200 10m;
add_header X-FastCGI-Cache $upstream_cache_status;
}
性能实测:首页访问速度从 400ms → 30ms,吞吐量提升 13倍。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》