linux

nginx缓存策略是什么

小樊
53
2025-09-19 10:00:16
栏目: 编程语言

Nginx缓存策略概述
Nginx缓存是通过将后端响应或静态资源存储在本地(磁盘/内存),减少重复请求对后端的压力,提升响应速度的核心性能优化手段。其核心逻辑包括缓存键生成(标识缓存项)、缓存存储(路径/大小管理)、缓存有效期控制(存活时间)及缓存命中处理(直接返回/回源)。

一、基础缓存配置

1. 定义缓存路径与区域

通过proxy_cache_path指令配置缓存存储的核心参数,是启用缓存的前提:

2. 启用缓存并设置有效期

locationserver块中,通过以下指令启用缓存并控制有效期:

二、常见缓存策略

1. 静态资源长期缓存

针对JS、CSS、图片等不常变化的静态资源,设置较长的缓存时间(如1年),并通过immutable指令告知浏览器资源不会修改,避免重复验证:

location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2|ttf)$ {
    expires 365d;  # 缓存1年
    add_header Cache-Control "public, immutable";  # 公共缓存,不可变
    access_log off;  # 关闭日志减少I/O
}

此策略可显著减少静态资源的重复请求,提升页面加载速度。

2. 动态内容短期缓存

针对API、动态页面等频繁变化的内容,设置较短的缓存时间(如5-10分钟),并允许使用过期缓存(stale)减少后端压力:

location /api/ {
    proxy_cache my_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";  # 缓存键(包含请求参数)
    proxy_cache_valid 200 5m;  # 200状态码缓存5分钟
    proxy_cache_use_stale error timeout updating http_500 http_502;  # 缓存失效时可使用过期缓存(如后端错误、超时)
    proxy_pass http://backend;
}

此策略平衡了动态内容的实时性与后端负载。

3. 分层缓存(CDN+浏览器+Nginx)

结合CDN、浏览器缓存和Nginx代理缓存,构建多级缓存体系,减少回源次数:

4. 缓存失效与清理

通过以下方式主动控制缓存更新:

三、高级缓存优化技巧

1. 使用Stale缓存

通过proxy_cache_use_stale指令,在缓存更新(如后端错误、超时)时,继续使用旧缓存响应,避免用户等待:

proxy_cache_use_stale error timeout updating http_500 http_503;  # 缓存失效时可使用过期缓存

此策略可提升用户体验,尤其在缓存更新期间。

2. 缓存分区

通过自定义proxy_cache_key,将缓存按用户角色(如cookie_user)或请求参数(如$arg_type)分区,避免不同用户的缓存互相干扰:

proxy_cache_key "$scheme$request_method$host$request_uri$cookie_user";  # 包含用户cookie

此策略适用于个性化内容(如用户中心页面)的缓存。

3. 后台更新缓存

通过proxy_cache_background_update on指令(需商业版或第三方模块),在缓存过期时后台更新,不影响当前请求的响应速度:

proxy_cache_background_update on;  # 后台更新缓存

此策略可提升缓存的实时性,同时保持高并发性能。

四、缓存状态监控

通过stub_status模块或add_header指令,监控缓存命中情况:

0
看了该问题的人还看了