如何利用 map 指令在日志中将复杂请求路径脱敏或归类

轻伟大大_9033

轻伟大大_9033

2026-05-20

515人浏览

原创

map指令通过正则匹配$uri或$request_uri实现路径脱敏与业务归类:提取稳定前缀映射为service标签(如/order)、掩码动态ID为*、组合变量生成分目录日志、脱敏敏感查询参数(如token),统一支撑日志分析与安全合规。

如何利用 map 指令在日志中将复杂请求路径脱敏或归类

用 map 指令对请求路径做脱敏或归类,核心是把杂乱的 `$request_uri` 或 `$uri` 映射成简洁、可读、带业务语义的标签,既保护接口细节,又支撑日志分析和监控归因。

提取业务线/模块名,实现路径归类

真实请求路径往往携带大量动态参数或ID(如 /api/v2/order/123456789/items?limit=20),直接记录不利于聚合统计。可用 map 从路径中提取稳定前缀,映射为统一业务标识:

  • 定义在 http 块顶层:
map $uri $log_service {
    ~^/api/v1/user/      user;
    ~^/api/v1/order/      order;
    ~^/api/v1/pay/        pay;
    ~^/admin/api/         admin;
    default               unknown;
}
  • 该配置不依赖参数,只看路径开头;正则匹配优先级从上到下,第一个命中即生效
  • 归类后可在 log_format 中直接引用 $log_service,例如:
    log_format main '$remote_addr [$time_local] $log_service "$request_method $uri" $status';

掩码动态ID段,保留结构不暴露敏感值

有些路径中嵌入了用户ID、订单号等不可推导但需脱敏的字段(如 /user/889900123/profile)。可用 map 替换具体数字为占位符,兼顾可读性与合规性:

  • 写法示例(支持多级路径):
map $uri $sanitized_uri {
    default $uri;
    ~^(/[^/]+)/\d{6,12}(/.*|$)   "$1/***$2";
    ~^(/[^/]+)/[a-zA-Z0-9]{8,16}(/.*|$)   "$1/***$2";
}
  • 第一行匹配形如 /user/123456789/settings → 转为 /user/***/settings
  • 第二行适配 UUID 类路径(如 /order/a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8)
  • 注意:正则中用 .* 匹配后续任意内容,避免截断查询参数

组合维度生成层级日志路径,便于切割与归档

将归类变量与时间、环境等结合,直接用于 access_log 路径,实现“日志即维度”:

  • 例如,按业务线 + 当天日期分目录:
map $uri $log_service {
    ~^/api/v1/order/  order;
    ~^/api/v1/user/    user;
    default            other;
}
<h1>在 server 块中使用:</h1><p>access_log /var/log/nginx/${log_service}/$(date +%Y%m%d).log main;</p>
  • 实际部署时需配合 logrotate 的通配符轮转(如 /var/log/nginx/*/2026*.log)
  • Nginx 不解析 $(date),此处仅为示意;生产中常用脚本预创建目录,或借助外部工具(如 cron + mkdir)
  • 更稳妥做法是用内置变量拼接静态路径,如:/var/log/nginx/$log_service/access.log,再由 logrotate 按日切分

处理带查询参数的路径脱敏(如含 token 的回调地址)

部分请求路径本身携带敏感参数(如 /callback?token=abc123&uid=98765),此时仅靠 `$uri` 不够,需联动 `$args` 或 `$request_uri`:

  • 推荐分离处理:先用 map 对 `$request_uri` 做整体掩码,再在 log_format 中引用
  • 示例(隐藏 token 和 uid 参数):
map $request_uri $sanitized_request_uri {
    default $request_uri;
    ~^(.*\?)(([^&]*&)*)(token|uid)=([^&\s]+)(&.*)?$ "$1***$6";
    ~^(.*\?)(([^&]*&)*)(token|uid)=([^&\s]+)$ "$1***";
}
  • 该规则优先匹配含 & 的中间参数,再兜底结尾参数,避免破坏 URL 结构
  • 结果如:/callback?token=abc123&uid=98765 → /callback?***
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

423

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

4027

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6885

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

601

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1516

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3978

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

537

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

179

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习