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

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

admin2周前 (04-05)AI技术19

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

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 失败且提示模糊

相关文章

神经网络分类总结

从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。 从网络结构角度可为前向网络与反馈网络。 从学习方式角度可分为有导师学习网络和无导师学习网络。 按连续突触性...

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

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

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

前端开发高级应用:MuleRun如何连接Slack通知 MuleRun消息推送集成配置步骤实战案例|Duuu笔记

若MuleRun无法向Slack推送通知,需依次配置Incoming Webhook或Bot Token、在MuleRun中设置对应通知目标参数,并通过最小化任务测试验证;常见失败原因包括凭据错误、权...

深入理解优化:如何利用 Gemini 3.1 的阶梯计费策略?企业级大规模调用实务完全指南|Duuu笔记

需深入理解Gemini 3.1阶梯计费与调用联动关系,通过识别阶梯区间、请求级Token预估截断、多模型路由调度、响应缓存去重、项目拆分配额绑定五种路径优化成本。 ☞☞☞AI 智能聊天, 问答助手,...

AI核心技巧:如何重置openclaw硬件设置 openclaw恢复出厂设置操作方法【操作】深度解析|Duuu笔记

重置 OpenClaw 配置有四种方法:一、交互式向导重置(openclaw onboard --reset);二、指定作用域的命令行重置(如--reset-scope config);三、手动删除~...

发表评论

访客

看不清,换一张

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