proxy_cache_path是Nginx反向代理缓存的基石指令,必须置于http块中,通过levels定义多级目录结构、keys_zone设共享内存元数据区、inactive与max_size协同管控生命周期和磁盘用量,路径需确保Nginx进程可写。

proxy_cache_path 是 Nginx 反向代理缓存的基石指令,必须写在 http 块内,它不只指定“缓存存在哪”,更决定缓存怎么组织、怎么查、怎么清理。配错参数,轻则命中率低,重则缓存完全不生效或写入失败。
path 与 levels:缓存文件怎么分目录才高效
缓存根路径(如 /var/cache/nginx/proxy_cache)必须提前创建,并确保 Nginx worker 进程用户(如 www-data 或 nginx)有读写权限。所有缓存文件堆在一个目录里,当数量超几万时,文件系统性能会急剧下降。
levels 就是用来解决这个问题的——它按哈希值自动拆分多级子目录:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
levels=1:2最常用:取缓存 key 的 MD5 后 3 位,第 1 位建一级目录(共 16 种),后 2 位建二级目录(共 256 种),最终路径类似/path/d/07/abc123 -
levels=2:2:2适合高并发大流量场景,用最后 6 位分三段,生成更多目录层级 - 避免用
levels=1或levels=2单级结构,容易造成单目录文件堆积
keys_zone:内存里靠什么快速判断是否命中
keys_zone 是必填项,格式为 名称:大小(如 my_cache:10m)。它不是存响应体,而是在共享内存中维护 key、状态、过期时间等元数据,用于毫秒级判断缓存是否命中。
- 名称(如
my_cache)需全局唯一,后续proxy_cache my_cache才能正确引用 - 1MB 内存约支持 8000 个缓存条目;10m ≈ 支持 8 万个活跃 key;20m 更适合中大型业务
- 大小设小了,新缓存写入会被拒绝;Nginx 启动时就分配该内存,不可动态扩容
inactive 与 max_size:磁盘空间怎么管才稳妥
这两个参数协同控制缓存生命周期和磁盘健康:
-
inactive指“多久没被访问就淘汰”,比如inactive=30m表示 30 分钟内未命中的缓存会被清理,不管是否过期 -
max_size是整个缓存路径的磁盘总上限(如max_size=2g),不是单个 zone 的限制;超限时 Nginx 自动删除最久未用的缓存文件 - 两者缺一不可:
inactive防止冷数据长期占位,max_size防止缓存无节制膨胀挤占系统空间
use_temp_path=off 等优化细节
一些可选但强烈建议启用的参数:
-
use_temp_path=off:关闭临时文件写入,让缓存直接落盘,减少 I/O 开销,提升写入效率 - 缓存路径建议挂载在 SSD 分区,避免放在
/tmp或内存盘(tmpfs)上,防止重启丢失或空间不足 - 配置后务必用
nginx -t检查语法,再nginx -s reload生效;首次启动时 Nginx 会自动创建目录结构

















