Nginx是大型架构核心,下面我详解Nginx缓存原理@mikechen
Nginx缓存
Nginx缓存,指将上游服务器(如应用服务器或后端API)的响应在Nginx层存储一段时间。

以便后续相同请求,直接由缓存返回,而无需再次访问后端。
在高并发场景下,Nginx不仅能作为强大的反向代理与负载均衡器。
更能通过高效缓存机制,显著提升系统性能、降低后端压力,实现“性能提升10倍”的效果。
Nginx缓存原理
Nginx缓存的核心逻辑非常高效,整个流程如下:

请求到达:Nginx根据配置拦截满足条件的请求(如GET/HEAD方法、特定URI、主机名、请求头等)。
缓存查找:Nginx对请求,生成缓存键(proxy_cache_key)。
命中(HIT):直接从缓存读取响应并返回客户端,通常还会更新LRU或访问时间。
未命中(MISS/EXPIRED):若无有效缓存,Nginx向上游回源请求。
回源与写入:Nginx从后端获取响应,按配置的缓存有效期(proxy_cache_valid、Cache-Control、Expires等)决定是否写入缓存。
写入过程涉及将响应写入临时文件并最终放入缓存索引,同时可能执行缓存压缩或分片。
Nginx缓存配置

1.基本开启与存储配置
proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:100m max_size=10g inactive=60m use_temp_path=off;
keys_zone:用于存放缓存索引的共享内存,需足够大以容纳活跃条目索引。
levels:决定缓存文件目录分层,避免单目录大量文件带来的性能问题。
max_size 与 inactive:控制容量与空闲条目的淘汰时长。
2.缓存键与命中率优化
设计合理的 proxy_cache_key(默认可用schemehost$request_uri)。
避免将无意义的查询参数纳入键中(用map或set去除tracking参数),以提高命中率。
3.缓存有效期与一致性策略
使用 proxy_cache_valid 设置常见状态码的缓存时间,例如 proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
尊重上游Cache-Control/Expires,或使用 proxy_ignore_headers 来覆盖上游头,以便在可控情况下延长缓存。
4.系统与IO调优
将缓存目录置于低延迟大吞吐的存储(例如SSD)并使用独立分区,避免与系统盘竞争I/O。
调整操作系统缓存与文件描述符限制(ulimit -n)、AIO或sendfile等优化(sendfile on; tcp_nopush on; tcp_nodelay on;)。
keys_zone大小应与并发连接与缓存条目数匹配,过小会导致频繁索引失效。
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。