缓存路径与存储
使用proxy_cache_path
指令定义缓存存储路径、层级结构及大小,例如:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
levels=1:2
:定义缓存目录层级,提升查找效率。max_size
:限制缓存最大占用空间,避免磁盘占满。启用缓存指令
在location
块中通过proxy_cache
引用缓存区域,并设置缓存键:
location / {
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
}
基于内容的静态缓存
对静态资源(JS/CSS/图片)设置长期缓存,结合expires
和Cache-Control
头:
location ~* \.(jpg|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
动态内容缓存
对API响应等动态内容设置短时间缓存,支持条件缓存:
location /api {
proxy_cache my_cache;
proxy_cache_valid 200 10s; # 缓存200状态码10秒
proxy_cache_use_stale error timeout; # 缓存失效时允许使用过期缓存
}
缓存绕过与锁定
proxy_cache_bypass
绕过缓存(如携带特定请求头时):proxy_cache_bypass $http_cache_control; # 若请求头包含Cache-Control则不缓存
proxy_cache_lock
防止缓存击穿,同一资源并发请求仅允许一个向后端获取数据。缓存更新与清理
proxy_cache_purge
指令配合自定义接口实现缓存刷新。inactive
参数设置非活跃缓存过期时间,或通过max_size
触发LRU清理。缓存分层
结合内存缓存(如fastcgi_cache
)与磁盘缓存,提升访问速度。
压缩与加密
启用gzip_static
预压缩静态资源,或通过第三方模块对缓存内容加密。
监控与调优
$upstream_cache_status
日志统计缓存命中率,优化配置。worker_processes
和worker_connections
提升并发处理能力。静态资源加速
为图片、字体等设置1年以上缓存,配合版本号控制更新:
location ~* \.(png|jpg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable"; # 禁止缓存更新
}
动态内容混合缓存
对频繁访问的动态数据(如用户个人页)设置短时间缓存,结合用户ID生成缓存键:
location /user/profile {
proxy_cache user_cache;
proxy_cache_key "$host$request_uri$cookie_user_id";
proxy_cache_valid 200 5m;
}
参考来源: