全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 6 分钟 ✍️ juanwangdev

动态缓存与静态缓存

不同类型的内容适用不同的缓存策略。静态内容适合长期缓存,动态内容需要更精细的控制。

静态缓存

特点与配置

nginx
# 静态文件 - 长期缓存
location ~* \.(css|js|jpg|jpeg|png|gif|svg|woff|woff2|ttf|ico)$ {
    root /var/www/static;
    
    expires 365d;
    add_header Cache-Control "public, immutable";
    
    # 可选:NGINX 层也缓存
    open_file_cache max=10000 inactive=60s;
    open_file_cache_valid 30s;
}
  • 内容不变或文件名带 hash
  • 适合长期缓存(365 天)
  • 无需回源验证
  • immutable 告知浏览器有效期内不重新验证

动态缓存

代理缓存动态内容

nginx
http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=dynamic_cache:10m max_size=1g inactive=30m;
}

server {
    # API 响应 - 短期缓存
    location /api/ {
        proxy_cache dynamic_cache;
        proxy_pass http://backend;
        
        # 短期缓存
        proxy_cache_valid 200 5m;
        proxy_cache_valid 404 1m;
        
        # 带 Cookie 的请求不缓存
        proxy_cache_bypass $http_cookie;
        proxy_no_cache $http_cookie;
        
        # 缓存状态头
        add_header X-Cache-Status $upstream_cache_status;
    }
}

混合缓存

动静分离

nginx
server {
    # 静态资源 - 客户端缓存
    location /static/ {
        root /var/www;
        expires 30d;
        add_header Cache-Control "public";
    }
    
    # 半动态 - NGINX 代理缓存
    location /articles/ {
        proxy_cache dynamic_cache;
        proxy_pass http://backend;
        proxy_cache_valid 200 10m;
    }
    
    # 纯动态 - 不缓存
    location /api/realtime/ {
        expires -1;
        add_header Cache-Control "no-store, no-cache";
        proxy_pass http://backend;
    }
}

open_file_cache

静态文件元数据缓存

nginx
http {
    open_file_cache max=10000 inactive=20s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;
}
  • max — 缓存条目上限
  • inactive — 不活跃过期时间
  • open_file_cache_valid — 验证缓存有效性的间隔
  • min_uses — 最少使用次数才缓存

open_file_cache 缓存文件元数据(是否存在、大小、修改时间等),减少 stat() 系统调用。高流量静态文件站点必开。

按用户类型缓存

登录与未登录用户

nginx
map $cookie_session $is_logged_in {
    default 0;
    ~. 1;
}

map $is_logged_in $cache_zone {
    0 static_cache;
    1 "";
}

server {
    location / {
        if ($cache_zone != "") {
            proxy_cache $cache_zone;
        }
        proxy_pass http://backend;
    }
}

未登录用户使用公共缓存,登录用户每次请求回源。适合内容站点,首页和文章页缓存,个人中心不缓存。

要点总结

  • 静态文件使用 expires + immutable 长期缓存
  • 动态 API 使用 proxy_cache 短期缓存(1-10 分钟)
  • open_file_cache 缓存文件元数据减少 stat 调用
  • 带 Cookie/Session 的请求通常不缓存
  • 半动态内容使用代理缓存 + 后台更新
  • 纯实时数据设置 no-store 禁止缓存
  • 按用户类型(登录/未登录)区分缓存策略

📝 发现内容有误?点击此处直接编辑

← 上一篇 Nginx限流配置(limit_req)
下一篇 → 缓存过期与清理策略
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库