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

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

Nginx缓存

Nginx缓存,指将上游服务器(如应用服务器或后端API)的响应在Nginx层存储一段时间。

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

以便后续相同请求,直接由缓存返回,而无需再次访问后端。

在高并发场景下,Nginx不仅能作为强大的反向代理与负载均衡器。

更能通过高效缓存机制,显著提升系统性能、降低后端压力,实现“性能提升10倍”的效果。

 

Nginx缓存原理

Nginx缓存的核心逻辑非常高效,整个流程如下:

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

请求到达:Nginx根据配置拦截满足条件的请求(如GET/HEAD方法、特定URI、主机名、请求头等)。

缓存查找:Nginx对请求,生成缓存键(proxy_cache_key)。

命中(HIT):直接从缓存读取响应并返回客户端,通常还会更新LRU或访问时间。

未命中(MISS/EXPIRED):若无有效缓存,Nginx向上游回源请求。

回源与写入:Nginx从后端获取响应,按配置的缓存有效期(proxy_cache_valid、Cache-Control、Expires等)决定是否写入缓存。

写入过程涉及将响应写入临时文件并最终放入缓存索引,同时可能执行缓存压缩或分片。

 

Nginx缓存配置

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

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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

评论交流
    说说你的看法