最稳妥方式是用X-Admin-Preview请求头配合proxy_cache_bypass和proxy_no_cache指令,二者必须同location、同条件、同时启用,且需配对使用以避免越权缓存;变量为$http_x_admin_preview,非空且不为"0"即生效,并可通过X-Cache-Status响应头及日志验证。

让管理后台请求不走缓存,最稳妥的方式是用自定义请求头(如 X-Admin-Preview)配合 proxy_cache_bypass 和 proxy_no_cache,两者必须同 location、同条件、同时启用。
用 X-Admin-Preview 头精准识别管理请求
管理员调用接口时带上这个头,Nginx 就能立刻识别并绕过缓存。对应变量是 $http_x_admin_preview(注意短横变下划线、全小写):
- 前端或 curl 发起请求:
curl -H "X-Admin-Preview: true" https://site.com/api/admin/users - Nginx 配置:
proxy_cache_bypass $http_x_admin_preview; - 该变量只要非空且不为 "0",就触发绕过,无需额外判断值内容
必须同步配置 proxy_no_cache 防止响应被缓存
只跳过读缓存不够,若带敏感数据的响应被存进缓存,后续普通用户可能误命中。所以要配对使用:
-
proxy_no_cache $http_x_admin_preview;—— 条件与 bypass 完全一致 - 这样既不查缓存,也不存响应,避免越权风险
- 两个指令必须写在同一 location 块内,且该 location 已启用
proxy_cache my_cache;
验证是否真正生效
不能只看配置,要用真实请求确认行为:
- 发起带头请求后,检查响应头:
X-Cache-Status: BYP(需提前加add_header X-Cache-Status $upstream_cache_status;) - 查看 Nginx 访问日志中
$upstream_cache_status字段是否为BYP - 对比不带头的请求,确认普通流量仍能命中缓存(
HIT或MISS),证明策略未泛化
进阶:结合 IP 白名单增强安全性
如果管理接口只允许内网或跳板机访问,可叠加 IP 判断,进一步收窄绕过范围:
- 例如限制仅来自
10.10.10.0/24或192.168.1.100的请求才绕过 - 配置:
proxy_cache_bypass $http_x_admin_preview $remote_addr ~^(10\.10\.10\.|192\.168\.1\.100)$; - 同样要配对
proxy_no_cache,变量顺序和内容保持一致











