最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 性能优化:配置 proxy_no_cache 实现在特定场景下动态跳过缓存生成
时间:2026-06-23 09:11:05 编辑:袖梨 来源:一聚教程网
proxy_no_cache需与proxy_cache_bypass协同作用才能动态跳过缓存:前者阻止响应写入缓存,后者跳过缓存查找;须用map统一预处理登录态、角色、路径等信号为0/1变量,并在location中成对启用两指令,任一变量为1即彻底绕过缓存。
要让 proxy_no_cache 在特定场景下真正“动态跳过缓存生成”,关键不是让它单独工作,而是让它和 proxy_cache_bypass 协同作用——前者管“不存”,后者管“不读”。只设 proxy_no_cache 1 或直接写变量,往往只能阻止响应落盘,却无法避免返回旧缓存内容。
用 map 预处理业务特征,生成可复用的布尔变量
把登录态、角色、设备、路径、参数等信号统一转为 0/1 变量,逻辑清晰、便于维护:
- 检测用户是否已登录:
map $cookie_sessionid $no_cache_by_login { ~. 1; default 0; } - 识别高权限操作:
map $http_x_user_role $no_cache_by_role { "admin" 1; "editor" 1; default 0; } - 拦截调试类请求:
map $request_uri $no_cache_by_path { ~*^/admin/ 1; ~*^/api/v1/debug 1; default 0; } - 支持前端主动触发:
map $arg_nocache $no_cache_by_arg { "1" 1; "true" 1; default 0; }
location 中必须成对启用 bypass 和 no_cache
两个指令要传入完全相同的变量列表,Nginx 才会按“任一为真即绕过”的逻辑统一执行:
-
proxy_cache_bypass $no_cache_by_login $no_cache_by_role $no_cache_by_path $no_cache_by_arg;
→ 请求阶段跳过缓存查找,直连后端 -
proxy_no_cache $no_cache_by_login $no_cache_by_role $no_cache_by_path $no_cache_by_arg;
→ 响应阶段禁止写入缓存,避免敏感内容误存
只要其中任意一个变量值为 1(比如用户带了有效 session ID),整条请求就彻底脱离缓存链路。
默认行为应是“缓存友好”,避免误伤正常流量
所有 map 的 default 必须设为 0,否则空值、缺失字段或未匹配路径可能意外触发绕过:
- 不要在全局
http块中直接写proxy_no_cache $cookie_sessionid——空 cookie 会被视为空字符串,但 Nginx 对变量做的是“非空即真”判断,容易误判 - 对
/static/、/images/、.js、.css等静态资源路径,单独配location,跳过上述 map 判断,专注用expires或proxy_cache_valid管理 - 确保
proxy_cache已在该location中启用,否则proxy_cache_bypass和proxy_no_cache不生效
验证是否真正生效,不能只看配置
实测时关注响应头和实际行为:
- 发起带触发条件的请求,例如:
curl -H "X-User-Role: admin" https://example.com/dashboard - 检查响应头中是否缺失
X-Cache: HIT,理想状态是出现X-Cache-Status: BYP或X-Cache: MISS - 确认后端日志有本次请求记录(证明没命中缓存),且缓存目录中无对应键文件(证明没写入)
相关文章
- 明末渊虚之羽防具有哪些排名 07-02
- 如何获取和平精英皮肤照片 07-02
- 空洞骑士丝之歌如何获取制造金属 07-02
- 鱼骨头螃蟹阵容如何搭配 07-02
- 战魂旅人玩法是什么 07-02
- 无限暖暖祝你幸福发饰如何获取 07-02