Nginx缓存原理详解:如何提高10倍性能!

Nginx是大型架构核心,下面我详解Nginx缓存原理@mikechen

Nginx缓存

在高并发架构中,Nginx不仅是流量调度的“网关之王”,更是系统性能优化的“隐藏王牌”。

得益于其强大的缓存机制,Nginx可以显著降低后端服务器压力,让接口响应速度提升至原来的10倍以上。

Nginx缓存是指:Nginx在本地磁盘或内存中保存后端响应内容。

下一次相同请求直接返回缓存结果,而无需再次访问后端。

Nginx缓存原理详解:如何提高10倍性能!

简单来说,它让Nginx“有记忆”。

当一个请求被缓存后,再有相同请求时,Nginx直接在本地返回数据,就像CDN一样快。

 

Nginx缓存原理

Nginx缓存的工作原理,可以概括为“请求拦截 → 缓存检索 → 内容响应 → 状态回写”四步。

Nginx缓存原理详解:如何提高10倍性能!

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缓存真正“发挥极致性能”,必须掌握以下四大核心配置。

Nginx缓存原理详解:如何提高10倍性能!

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面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧