Nginx缓存机制原理:提升10倍性能关键!

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

Nginx缓存

Nginx缓存是高并发、高性能架构中最重要的优化手段之一。

通过合理配置,能大幅减少后端服务器负载、降低响应时间。

甚至在某些场景下实现10倍以上的性能提升(尤其适合读多写少、静态化或半静态化内容)。

Nginx缓存机制原理:提升10倍性能关键!-mikechen

Nginx 相关的“缓存”通常要分成两层看:一层是浏览器缓存,一层是 Nginx 代理缓存。

浏览器缓存依赖 Cache-Control、Expires、ETag、Last-Modified 等机制,命中后可能直接本地返回,或者通过 304 做协商缓存校验。

Nginx 代理缓存则是把上游返回的完整响应保存到本地磁盘或缓存区,后续相同请求直接由 Nginx 返回,而不是再打到后端应用。

 

Nginx缓存机制原理

从机制上看,Nginx 缓存通常依赖于反向代理模式实现。

整体架构,如下:

Nginx缓存机制原理:提升10倍性能关键!-mikechen

    用户
      │
      ▼
 CDN缓存层
      │
      ▼
 Nginx缓存层
      │
      ▼
 Redis缓存层
      │
      ▼
JVM本地缓存
      │
      ▼
   MySQL

整体流程如下:

客户端请求先到达 Nginx,Nginx 根据缓存策略判断该请求是否命中缓存。

如果命中,则直接返回缓存内容;

如果未命中,则将请求转发给后端服务器,待后端返回结果后再将响应写入缓存,并返回给客户端。

为了保证缓存的有效性,Nginx 还支持通过缓存过期时间、缓存更新策略、缓存清理机制等手段,平衡数据一致性与性能收益。

 

Nginx缓存配置

Nginx 缓存配置的关键在于:参数设计。

Nginx缓存机制原理:提升10倍性能关键!-mikechen

首先是 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
    }
}

 

评论交流
    说说你的看法