Nginx反向代理启用proxy_cache需协同配置proxy_cache_path定义缓存路径、层级、内存索引区及清理策略,并在location中通过proxy_cache、proxy_cache_valid、proxy_cache_key等指令启用和控制缓存行为,最后通过X-Cache-Status响应头验证效果。

在 Nginx 反向代理中启用 proxy_cache,核心是让 Nginx 缓存后端服务器的响应内容,减少重复请求对上游的压力,提升响应速度。它不是简单加几行配置就能生效,关键在于路径定义、缓存区划分、键值生成逻辑和过期策略的协同。
缓存存储路径与目录层级(proxy_cache_path)
必须先用 proxy_cache_path 指令声明缓存物理位置和结构:
-
path要指向有足够空间且 Nginx 进程可读写的目录,比如/var/cache/nginx/proxy_cache -
levels控制子目录层级和命名长度,常用levels=1:2:第一级用 key 的最后 1 位字符建目录,第二级用接下来的 2 位,避免单目录下文件过多影响性能 -
keys_zone是内存中的索引区,格式如keys_zone=mycache:100m,100MB 内存约可管理 80 万个缓存项,不能设太小否则频繁淘汰索引 -
inactive设为inactive=1h表示 1 小时内未被访问的缓存条目会被自动清理 -
max_size限制磁盘总用量,例如max_size=2g,超限时 Nginx 按 LRU 清理最久未用的缓存
启用缓存并绑定 zone(proxy_cache 与上下文)
仅声明路径还不够,需在具体 location 或 server 块中启用:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 用
proxy_cache mycache关联前面定义的 keys_zone 名称 - 搭配
proxy_cache_valid设置不同状态码的缓存时间,例如:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m; - 使用
proxy_cache_key自定义缓存键,推荐包含协议、主机、URI 和部分参数,避免因无关 query 导致重复缓存,例如:proxy_cache_key "$scheme$request_method$host$request_uri";
控制缓存行为的关键指令
缓存是否写入、是否跳过、是否更新,依赖这些条件判断:
-
proxy_cache_bypass $arg_nocache $cookie_nocache:当 URL 含nocache=1或用户带特定 cookie 时,绕过缓存直接回源 -
proxy_no_cache $arg_nocache $http_pragma:满足条件时不写入缓存(但依然可能读缓存) -
proxy_cache_lock on防止缓存失效瞬间多个相同请求同时打到后端,只放行第一个,其余等待其结果并复用 - 注意默认不缓存 POST、PUT 等非安全方法,如需缓存需显式用
proxy_cache_methods GET HEAD POST
验证与调试缓存是否生效
光看配置没用,得确认实际行为:
- 在响应头中加入
add_header X-Cache-Status $upstream_cache_status;,返回值可能是HIT、MISS、BYPASS或EXPIRED - 检查缓存目录是否生成了对应层级的文件,例如
/var/cache/nginx/proxy_cache/a/1f/xxxxxx - 用
curl -I多次请求同一资源,观察响应头中X-Cache-Status和Age字段变化 - 注意浏览器自身缓存可能干扰判断,建议用
curl -H "Cache-Control: no-cache"排除干扰

















