当前位置:首页 > AI技术 > 正文内容

开发讲Nginx中map令现根据变量动态设置缓存时长最佳践|Duuu笔记

admin4个月前 (04-05)AI技术93

前端进阶技巧:本文深入解析

map指令用于Nginx中基于请求特征动态生成缓存时长变量,通过键值映射实现条件化赋值,配合proxy_cache_valid等指令达成精细化缓存控制。

map 指令是 Nginx 中实现“条件化变量赋值”的核心工具,它本身不直接控制缓存,但能基于请求特征(如 URL、Header、参数)生成自定义变量,再配合

proxy_cache_valid

expires

实现精细化缓存时长控制——这才是动态缓存的关键所在。

map 的本质:用键值映射生成新变量

map 不是 if,不能嵌套或写复杂逻辑,它的作用非常纯粹:根据一个源变量的值,查表匹配出目标变量的值。所有匹配必须在 server 块外(通常放在 http 块中)定义,且只支持字符串精确匹配或正则匹配。

例如,想对 API 接口和静态资源设置不同缓存时间:

http {

# 定义缓存时长变量 $cache_ttl

map $request_uri $cache_ttl {

default "10m"; # 默认 10 分钟

~*^/api/v1/users/ "5s"; # 用户接口仅缓存 5 秒

~*^/static/ "1h"; # 静态资源缓存 1 小时

~*\.(js|css|png|jpg)$ "1d"; # 资源文件缓存 1 天

}

server {

location / {

proxy_pass http://backend;

proxy_cache my_cache;

proxy_cache_valid 200 302 $cache_ttl; # 关键:这里引用动态变量

}

}

}

自由画布

百度文库和百度网盘联合开发的AI创作工具类智能体

下载

结合请求头或 Cookie 实现用户级缓存策略

比如对登录用户返回的内容不缓存,未登录用户可缓存更久。这时可借助

$cookie_user_id

$http_authorization

判断身份:

map $cookie_user_id $cache_ttl_for_user {

"" "30m"; # 无 cookie,视为游客,缓存 30 分钟

default "0s"; # 有 user_id,不缓存(等价于禁用)

}

map $http_authorization $cache_ttl_by_auth {

"" "1h";

default "0s";

}

注意:

"0s"

proxy_cache_valid

中表示“不缓存该响应”,不是“缓存 0 秒”;若要彻底跳过缓存,还可加

proxy_cache_bypass $cache_ttl_for_user;

配合使用。

避免常见陷阱:匹配顺序、默认值与正则细节

map 匹配按书写顺序从上到下,遇到第一个匹配即停止,所以正则要放 default 上方,否则永远走不到

正则匹配自动忽略大小写(

~*

),但需注意转义特殊字符,如

^/api\/v1\/

default 必须存在,否则未匹配时变量为空,可能导致

proxy_cache_valid

解析失败或回退为默认行为

map 变量只能用于指令上下文支持变量的地方,像

proxy_cache_valid

支持,但

proxy_cache_path

不支持

验证与调试技巧

动态缓存是否生效,不能只看配置,要实际验证响应头:

curl -I

查看

X-Cache

Cache-Control

头是否符合预期

在 log_format 中加入

$cache_ttl

,通过 access_log 确认每次请求匹配的值

临时加

add_header X-Cache-TTL $cache_ttl;

直观观察变量取值

Nginx reload 后,用

nginx -t

检查语法,map 错误常导致 reload 失败且提示模糊

相关文章

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

一、Submarine(Hadoop生态系统) (一)Submarine 介绍 (三)Submarine 属于 Hadoop 生态系统 (四)Submarine 官网版...

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

深入理解AI:WorkBuddy 怎么做组织架构图 WorkBuddy 组织架构图生成教程【实战】完全指南|Duuu笔记

WorkBuddy可通过四种方式生成组织架构图:一、用自然语言指令触发AI自动解析并渲染Mermaid图表;二、上传Excel结构化数据映射字段后批量构建动态树状图;三、启用OpenClaw技能包对接...

深入理解前端开发:Minimax 视频生成中负面提示词(Negative Prompt)写法完全指南|Duuu笔记

Minimax视频生成中负面提示词需用英文、逗号分隔,支持权重调节(如(blurry:1.3)),按构图/主体/画质/风格四类精简选取,禁用not/no/中文及违规词,须通过A/B测试验证有效性。...

深入理解前端开发:Minimax视频生成黑科技:复杂动作模拟完全指南|Duuu笔记

为精准模拟复杂动作,需采用分帧提示词构建、骨骼关键点引导注入和多阶段动作蒸馏三法:一、将动作拆解为带空间姿态的关键帧序列并加物理约束;二、注入2D/3D关键点坐标锚定关节位置;三、通过粗生成→特征提取...

前端开发高级应用:骡子快跑支持日程安排吗 骡子快跑时间管理助手用法实战案例|Duuu笔记

骡子快跑具备日程安排能力,可通过计算机模式构建长效日程代理、自然语言注入日历事件、绑定外部日历实现双向同步三种方式实现。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Dee...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。