要构建高性能本地磁盘缓存体系,需协同设计存储路径、内存索引、淘汰策略和文件系统行为:一、缓存路径须在http块顶层声明并独立挂载,设levels防止单目录膨胀;二、keys_zone需足量且命名一致,静态与动态资源应分设;三、use_temp_path=off确保稳定直写,需预留足够磁盘空间;四、max_size与inactive配合实现LRU清理与软淘汰,inactive宜略小于业务热点周期。

要通过 proxy_cache_path 构建高性能本地磁盘缓存体系,核心是让缓存“写得稳、存得准、清得快、查得快”。它不是简单加一行配置,而是围绕存储路径、内存索引、淘汰策略和文件系统行为四方面协同设计。
一、缓存路径与目录结构必须提前规划
缓存路径需在 http 块顶层声明,不可嵌套在 server 或 location 中:
-
路径需手动创建并授权:执行
mkdir -p /data/nginx/cache && chown nginx:nginx /data/nginx/cache,确保 Nginx 进程可读写 -
层级(levels)防止单目录膨胀:
levels=1:2生成两级子目录(如5/f/xxx),避免单目录下数万文件导致 inode 查找变慢 -
路径应独立挂载、避免跨设备:若使用 SSD,建议将
/data/nginx/cache单独挂载到该盘,不与系统盘混用
二、keys_zone 内存区要够用且命名一致
keys_zone 是缓存的“大脑”,存放 key、元数据和状态,大小直接影响并发缓存能力:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 每 1MB keys_zone 约支持 8000–10000 个缓存项:静态资源多(如 CDN 场景),建议 ≥64MB;常规网站 10–32MB 足够
-
名称必须与 location 中
proxy_cache的值完全一致:比如keys_zone=static_cache:16m,后续就得写proxy_cache static_cache - 不建议复用同一 keys_zone 处理差异极大的资源类型:静态资源与 API 响应应分设 zones,避免 key 冲突或过期策略互相干扰
三、use_temp_path=off 是稳定写入的关键开关
默认开启的 use_temp_path=on 会先写临时目录再 rename,极易因跨文件系统失败:
-
必须显式关闭:在
proxy_cache_path行末加use_temp_path=off,Nginx 就直接落盘到目标目录 -
关闭后要预留足够磁盘空间:峰值流量时所有响应体都直写该目录,建议可用空间 ≥ 1.5 ×
max_size -
验证是否生效:请求后检查
X-Proxy-Cache响应头是否出现HIT,同时确认/data/nginx/cache下生成了符合levels结构的真实缓存文件,而非空目录或残留.tmp
四、max_size 与 inactive 需配合使用,避免缓存积压
两者共同构成空间管理双保险,缺一不可:
-
max_size是硬上限:达到后 Nginx 启动清理线程,按 LRU 删除最久未访问的缓存项 -
inactive是软淘汰:比如设为1d,则任何缓存项只要 24 小时没被命中,不管是否超max_size都会被主动清理 -
建议 inactive 值略小于业务热点周期:例如图片类资源 7 天内大概率被重复访问,可设
inactive=5d;而 JS/CSS 若带版本哈希,可设更短,如inactive=2d


















