Nginx需同时配置proxy_cache_bypass和proxy_no_cache并共用同一组map变量,才能彻底禁用敏感接口缓存;还需在cache_key中加入用户标识、尊重Cache-Control头、隐藏敏感响应头。

要让 Nginx 对特定敏感接口(如 /admin/、/api/user/profile、带登录态的请求)彻底禁用缓存,不能只靠 proxy_no_cache 单独生效——它只阻止响应写入缓存,但不跳过缓存读取。必须配合 proxy_cache_bypass,且二者共用同一组判断变量,才能实现“请求不查缓存 + 响应不存缓存”的完整绕过。
用 map 提前定义敏感路径或特征
在 http 块中统一声明变量,把业务信号转为 0/1 开关:
-
按 URL 路径识别后台接口:
map $request_uri $no_cache_by_path { ~*^/admin/ 1; ~*^/api/debug 1; ~*^/api/v1/user 1; default 0; } -
按 Cookie 判断是否已登录(防止缓存用户私有内容):
map $cookie_sessionid $no_cache_by_login { ~. 1; default 0; } -
按请求头区分角色(如管理员直连后端):
WeChat macOS Proxy下载macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
map $http_x_user_role $no_cache_by_role { "admin" 1; "dev" 1; default 0; } -
按查询参数主动触发(如
?nocache=1):map $arg_nocache $no_cache_by_arg { "1" 1; "true" 1; default 0; }
在 location 中成对启用 bypass 和 no_cache
确保该 location 已启用缓存(如 proxy_cache my_cache),再加入以下两行:
proxy_cache_bypass $no_cache_by_path $no_cache_by_login $no_cache_by_role $no_cache_by_arg; proxy_no_cache $no_cache_by_path $no_cache_by_login $no_cache_by_role $no_cache_by_arg;
只要任一变量值为 1(例如访问 /admin/dashboard 或请求头含 X-User-Role: admin),Nginx 就会:
- 跳过缓存查找,直接转发请求到后端
- 不将响应体和响应头写入缓存目录
补充关键防护点
-
避免缓存带认证信息的响应:在
proxy_cache_key中加入$http_cookie或$http_authorization,让每个用户缓存 key 不同,防止交叉泄露 -
尊重后端 Cache-Control:确认未配置
proxy_ignore_headers Cache-Control,否则no-store或private头会被忽略 -
清除敏感响应头:用
proxy_hide_header移除Set-Cookie、X-Auth-Token等,避免它们被缓存并意外暴露
不复杂但容易忽略。

















