Nginx全局缓存路径由http块中的proxy_cache_path指令定义,需指定磁盘路径、levels哈希结构、keys_zone共享内存区及inactive/max_size策略,并在server或location中用proxy_cache引用同名zone启用缓存。

在 Nginx 中,全局缓存路径不是通过 nginx.conf 里的某个单一指令直接“定义”的,而是由 proxy_cache_path 指令在 http 块中声明,并配合 proxy_cache 在 server 或 location 块中启用,才能构成完整缓存方案。
proxy_cache_path 必须放在 http 块顶层
这是定义缓存存储位置、层级结构、自动清理策略等的核心指令,只能出现在 http 上下文中(不能在 server 或 location 内):
- 指定磁盘路径(如
/var/cache/nginx/proxy_cache),需确保 Nginx 工作进程(通常是www-data或nginx用户)有读写权限 - 用
levels=1:2设置两级目录哈希结构,避免单目录文件过多影响性能 - 通过
keys_zone=name:size声明共享内存区(如my_cache:10m),用于快速查找缓存 key,不存实际内容 - 可选配置
inactive=60m(超时未被访问则自动淘汰)、max_size=1g(磁盘上限,触发 LRU 清理)
缓存区名称需统一引用
proxy_cache_path 中的 keys_zone 名称(如 my_cache)是唯一标识符,在后续启用缓存时必须严格一致:
- 在
server或location块中使用proxy_cache my_cache;启用该缓存区 - 若多个 location 共享同一缓存区,key 冲突或过期策略需整体考虑;如需隔离,应定义多个
keys_zone - 注意:名称区分大小写,且不能含特殊字符或空格
需配套设置 proxy_cache_key 和缓存控制逻辑
仅声明路径和启用缓存还不够,实际缓存行为由以下指令协同决定:
-
proxy_cache_key定义缓存键,默认包含$scheme$proxy_host$request_uri,如需忽略某参数(如跟踪用的utm_*),需手动构造 key -
proxy_cache_valid按响应状态码设定缓存时间(如200 302 10m; 404 1m;) -
proxy_cache_use_stale可配置在后端异常时是否返回过期缓存,提升可用性 - 建议搭配
add_header X-Cache-Status $upstream_cache_status;方便调试命中/未命中状态
验证与维护要点
部署后需确认缓存真正生效,而非仅配置无误:
- 检查缓存目录是否创建成功:
ls -l /var/cache/nginx/proxy_cache,首次请求后应出现子目录和数据文件 - 用
curl -I URL查看响应头中的X-Cache-Status(如HIT、MISS、BYPASS) - 注意:GET 请求才默认缓存;POST、带 Cookie 或 Authorization 头的请求默认不缓存,需显式用
proxy_cache_bypass和proxy_no_cache控制 - 定期监控磁盘使用(
du -sh /var/cache/nginx/proxy_cache),确保max_size生效且未满

















