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

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

admin4个月前 (04-01)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 失败且提示模糊

相关文章

【大模型应用开发

二、大模型的泛化与微调 模型的泛化能力:是指一个模型在面对新的、未见过的数据时,能够正确理解和预测这些数据的能力。在机器学习和人工智能领域,模型的泛化能力是评估模型性能的重要指标之一。...

什么是LLM?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

前端开发实战详解:骡子快跑怎么注册账号 骡子快跑账号注册流程最佳实践|Duuu笔记

骡子快跑注册仅需1分钟,但激活码需从Discord指定频道获取,输错3次将锁账户24小时;积分与注册邮箱强绑定且不可更换;部分地区即使注册成功也无法运行Agent。 ☞☞☞AI 智能聊天, 问答助手...

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

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

常见的神经网络模型

前馈神经⽹络中包含激活函数( 、tanh函数等)、损失函数(均⽅差损失函数、 等)、优化算法(BP算法)等。常⽤的模型结构有:感知机、 、全连接神经⽹络、卷积神经⽹络、...

前端开发高级应用:Minimax视频生成提示词中文还是英文好实战案例|Duuu笔记

优先使用英文提示词,因其更契合模型训练语料并能稳定触发视觉特征;其次可采用中英混合策略兼顾文化专有名词;纯中文适用于强本土化场景;最终需通过多指标对比验证最优语言形式。 ☞☞☞AI 智能聊天, 问答...

发表评论

访客

看不清,换一张

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