Nginx缓存技术详解:教你提升10倍性能关键!

Nginx是大厂必备技能,下面我详解Nginx缓存技术@mikechen

Nginx缓存

Nginx 缓存(Proxy Cache)是指 Nginx 将后端服务器响应的内容(如 HTML、图片、JSON 数据等)保存在本地磁盘或内存中。

当下一个相同的请求到来时,Nginx 无需再将请求转发给后端,而是直接将内存或磁盘中的缓存内容返回给客户端。

Nginx缓存技术详解:教你提升10倍性能关键!-mikechen

它主要解决三类问题:

降低后端压力,热点静态资源、列表页、详情页不再反复打到 Java/Node/PHP 服务。

降低响应延迟,Nginx 直接从本地磁盘返回,避免网络往返、应用计算和数据库查询。

提高可用性,后端短暂故障或超时时,可继续返回旧缓存,避免页面完全不可用。

 

 

Nginx缓存原理

Nginx 缓存的核心本质:是一个基于键值对(Key-Value)的本地文件系统缓存机制。

Nginx缓存技术详解:教你提升10倍性能关键!-mikechen

Nginx 处理请求的大致流程如下:

  1. 计算缓存键:根据请求方法、主机名、URI、查询参数等信息生成缓存标识。
  2. 查询缓存:Nginx 在缓存区域中查找该对象。如果缓存仍有效,则直接将缓存内容返回给客户端。
  3. 请求上游:如果缓存不存在、已过期或被要求绕过缓存,Nginx 就向上游服务器发起请求。
  4. 保存响应:当响应满足缓存条件时,Nginx 将其写入缓存,并根据配置设定有效期。
  5. 过期与更新:缓存到期后,Nginx 可以重新请求上游并更新内容;也可以在更新期间继续返回旧内容,避免大量请求同时涌向上游。

 

Nginx缓存配置

整体配置,如下:

http {
    proxy_cache_path /var/cache/nginx
        levels=1:2
        keys_zone=api_cache:100m
        max_size=20g
        inactive=7d
        use_temp_path=off;

    upstream backend {
        server 127.0.0.1:8080;
        keepalive 64;
    }

    server {
        listen 80;
        server_name example.com;

        location /api/ {
            proxy_pass http://backend;

            proxy_cache api_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";

            proxy_cache_valid 200 301 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_valid any 30s;

            # 防缓存击穿:同一 key 只允许一个请求回源
            proxy_cache_lock on;
            proxy_cache_lock_timeout 5s;
            proxy_cache_lock_age 10s;

            # 后端异常时使用旧缓存
            proxy_cache_use_stale error timeout updating
                http_500 http_502 http_503 http_504;

            # 过期后后台更新,旧值继续服务
            proxy_cache_background_update on;

            # 便于观察命中率
            add_header X-Cache-Status $upstream_cache_status;

            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
}

proxy_cache_path 定义缓存目录、索引内存、容量和淘汰策略;

proxy_cache 在对应 location 中启用该缓存。

以上

评论交流
    说说你的看法
❯