Nginx缓存需协同配置keys_zone(内存元数据区)与max_size(磁盘硬上限),前者按预估缓存键数预留(如64m支持百万级),后者配合inactive触发LRU清理,防止磁盘打满。

控制 Nginx 缓存层的内存与磁盘配额,核心在于两个独立但协同工作的部分:共享内存区(keys_zone)用于元数据管理,磁盘路径(proxy_cache_path)用于实际内容存储。二者不能混为一谈,也不能只设其一。
共享内存区(keys_zone)决定能管多少缓存项
这个区域不存响应体,只存缓存键(key)、状态、访问时间、引用计数等轻量元数据。它的大小直接影响 Nginx 能否高效判断“是否命中缓存”:
- 1MB 共享内存约支持 8000 个缓存键;10MB ≈ 8 万个;100MB ≈ 80 万个
- 若 keys_zone 过小,新缓存会频繁挤掉旧 key,导致“假未命中”,降低缓存效率
- 若业务缓存 URL 变化多(如带用户 ID、时间戳参数),需按预估峰值 key 数预留空间
- 示例:
keys_zone=api_cache:64m适合日均百万级不同接口路径的中大型 API 网关
磁盘缓存配额(max_size)防止空间失控
这是真正限制缓存占用硬盘的硬性上限。Nginx 在达到该值后,会自动触发 LRU 清理机制,删除最久未被访问的缓存文件:
-
max_size=5g表示磁盘缓存最多用满 5GB,超出即清理,不会写满磁盘 - 必须配合
inactive使用——比如inactive=2h,表示 2 小时内未被访问的缓存才可被清理 - 注意:
max_size不是“目标用量”,而是“绝对上限”;实际占用通常略低于该值 - 建议值参考:静态资源站可设 10–50GB;API 缓存因单体体积小,2–10GB 更常见
磁盘路径与性能关键细节
缓存目录本身也影响稳定性与吞吐,不只是容量问题:
- 路径需提前创建,并确保 Nginx 工作用户(如
www-data或nginx)有读写权限 -
levels=1:2是推荐结构,避免单目录海量文件导致 inode 性能下降 -
use_temp_path=off必须开启,让缓存文件直接落盘到目标目录,跳过临时中转,减少 I/O 和出错概率 - 若用 SSD,可将缓存路径挂载在高速设备上;机械盘建议单独分区,避免和系统日志争 IO
配套缓冲行为需同步调优
缓存内容从后端接收、暂存、落盘、再发给客户端的过程,还受 proxy_buffering 相关参数影响:
-
proxy_buffering on开启后,需设置合理缓冲区:如proxy_buffers 8 128k+proxy_busy_buffers_size 256k - 大响应(如报表导出)易触发磁盘临时文件,可用
proxy_max_temp_file_size 0强制超限时返回 502,便于快速暴露瓶颈 -
proxy_buffer_size应 ≥ 最大响应头尺寸(含 Cookie、重定向 Location 等),建议至少 16k


















