Nginx是大型架构核心,下面我详解Nginx缓存机制@mikechen
Nginx缓存
Nginx缓存是高并发、高性能架构中最重要的优化手段之一。
通过合理配置,能大幅减少后端服务器负载、降低响应时间。
甚至在某些场景下实现10倍以上的性能提升(尤其适合读多写少、静态化或半静态化内容)。

Nginx 相关的“缓存”通常要分成两层看:一层是浏览器缓存,一层是 Nginx 代理缓存。
浏览器缓存依赖 Cache-Control、Expires、ETag、Last-Modified 等机制,命中后可能直接本地返回,或者通过 304 做协商缓存校验。
Nginx 代理缓存则是把上游返回的完整响应保存到本地磁盘或缓存区,后续相同请求直接由 Nginx 返回,而不是再打到后端应用。
Nginx缓存机制原理
从机制上看,Nginx 缓存通常依赖于反向代理模式实现。
整体架构,如下:

用户
│
▼
CDN缓存层
│
▼
Nginx缓存层
│
▼
Redis缓存层
│
▼
JVM本地缓存
│
▼
MySQL
整体流程如下:
客户端请求先到达 Nginx,Nginx 根据缓存策略判断该请求是否命中缓存。
如果命中,则直接返回缓存内容;
如果未命中,则将请求转发给后端服务器,待后端返回结果后再将响应写入缓存,并返回给客户端。
为了保证缓存的有效性,Nginx 还支持通过缓存过期时间、缓存更新策略、缓存清理机制等手段,平衡数据一致性与性能收益。
Nginx缓存配置
Nginx 缓存配置的关键在于:参数设计。

首先是 proxy_cache_path,它用于定义缓存存储路径、缓存层级和内存索引区等信息;
其次是 proxy_cache,用于在具体 server 或 location 中启用缓存;
再配合 proxy_cache_valid 设置不同响应状态码的缓存时间。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 后端upstream
proxy_cache my_cache; # 启用缓存,指定zone
# 缓存有效期(按状态码区分)
proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟
proxy_cache_valid 404 1m; # 404缓存1分钟
proxy_cache_valid any 5m; # 其他
# 推荐实用指令
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on; # 防止缓存击穿(多个请求同时回源)
proxy_cache_bypass $http_cache_purge; # 支持强制刷新
add_header X-Cache-Status $upstream_cache_status; # HIT/MISS/BYPASS
}
}