proxy_cache_path 是 nginx 代理缓存运行的前提,必须置于 http 块中;需手动创建路径并授权 worker 用户读写;levels 控制哈希分层目录结构(如 levels=1:2);keys_zone 分配共享内存存储元数据;max_size 和 inactive 共同管理磁盘缓存清理。

直接在 http 块里写一条 proxy_cache_path 指令,就能定义缓存存哪儿、怎么组织、用多少内存查、最多占多大磁盘空间。它不是可选功能,而是整个代理缓存运转的前提。
必须放在 http 块中,路径要提前创建并授权
这条指令只能出现在 http{...} 作用域内,不能塞进 server 或 location 里。Nginx 启动时就会检查路径是否存在、是否可写。
- 指定的目录(比如
/var/cache/nginx/proxy_cache)得手动创建好 - 确保 Nginx worker 进程用户(通常是
www-data或nginx)对该目录有读写权限 - 不建议放在
/tmp或tmpfs上,缓存需要持久化存储 - SSD 更适合高频读写的缓存场景
用 levels 控制缓存文件的目录结构
避免几万缓存文件挤在一个目录里拖慢文件系统性能,levels 就是靠哈希值自动分层建子目录。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
levels=1:2:最常用。取缓存 key 的 MD5 值最后 3 位,第 1 位建一级目录(如d),后 2 位建二级目录(如07),最终路径形如/path/d/07/abc123 -
levels=2:2:2:适合高并发大流量,用最后 6 位分三段,生成更细粒度的目录(如7d/02/10) - 别用
levels=1或levels=2单级结构,容易造成单目录文件堆积
keys_zone 是共享内存区,不是磁盘空间
这个参数名字带 “zone”,但实际分配的是内存,专门存缓存键、状态、过期时间等元数据,用于毫秒级判断是否命中。
- 格式为
名称:大小,例如my_cache:10m;名称后续要在proxy_cache中引用 - 每条元数据约占用 512 字节,1MB 内存大约能存 2000 个缓存项
- 设太小会导致新缓存写不进去,Nginx 日志里会出现 “no memory” 类错误
- 大小按预期并发缓存项估算,10m~100m 是常见范围
max_size 和 inactive 共同管理磁盘用量
这两个参数一起控制缓存“什么时候删”和“最多能占多少”,但逻辑不同。
-
max_size=10g是硬上限,指整个缓存路径下所有文件总大小不能超过该值;超限后按 LRU 清理最久未用项 -
inactive=60m表示某个缓存项如果 60 分钟内没被访问过,就标记为可清理(由后台异步执行) - 注意:
inactive不影响过期逻辑,过期时间由proxy_cache_valid控制 - 推荐搭配
use_temp_path=off,跳过临时文件阶段,提升写入效率










