要让特定管理端请求不走缓存、直连后端,核心是用proxy_cache_bypass主动跳过缓存查找,必须与proxy_cache同location启用,配合proxy_no_cache防污染,并通过authorization头、自定义x-admin-preview头或ip白名单精准触发,响应头x-cache-status:byp和日志$upstream_cache_status=byp验证生效。

要让特定管理端请求不走缓存、直连后端,核心不是“穿透”已有缓存,而是用 proxy_cache_bypass 主动跳过缓存查找环节。它必须和 proxy_cache 在同一 location 中启用,且触发条件需明确、安全、可验证。
必须共存:启用缓存 + 显式绕过
只写 proxy_cache_bypass 没有效果。Nginx 会直接忽略它,除非对应 location 已启用缓存:
- 必须配置
proxy_cache mycache;(名称需与proxy_cache_path中的keys_zone一致) - 必须在同一
location块内,不能只放在http或server块中 - 推荐搭配
proxy_cache_key和proxy_cache_valid明确缓存策略
精准识别管理端请求的三种可靠方式
避免依赖易伪造或泛化的条件,优先选择有业务语义、难被外部滥用的标识:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
基于 Authorization 头:管理员接口普遍带 Token,
$http_authorization变量天然存在且非空即有效
→ 配置:proxy_cache_bypass $http_authorization; -
基于自定义 Header:如
X-Admin-Preview: true,对应变量为$http_x_admin_preview(注意短横变下划线、全小写)
→ 配置:proxy_cache_bypass $http_x_admin_preview; -
结合真实 IP 白名单:配合
$remote_addr正则匹配内网或跳板机地址
→ 配置:proxy_cache_bypass $http_x_admin_preview $remote_addr ~^(10\.10\.10\.|192\.168\.1\.)
防止缓存污染:必须加 proxy_no_cache
proxy_cache_bypass 只控制“不读缓存”,默认仍会把后端响应写入缓存。若管理员请求返回含敏感数据(如用户列表、token),该响应可能被缓存并泄露给无权限用户:
- 务必添加
proxy_no_cache $http_authorization;(变量需与 bypass 完全一致) - 两个指令必须同 location、同条件,确保“不读 + 不存”原子生效
- 否则即使 bypass 成功,也存在越权风险
快速验证是否真正生效
上线前用真实请求交叉验证,不能只看配置:
- 发起带条件的请求:
curl -H "Authorization: Bearer abc" https://yoursite.com/api/admin/users - 检查响应头:
X-Cache-Status: BYP(需提前配add_header X-Cache-Status $upstream_cache_status;) - 查看 Nginx 日志:
$upstream_cache_status字段应为BYP,而非HIT或MISS - 对比无头请求:确认普通请求仍能命中
HIT,证明策略未影响正常流量










