Nginx - Hide/mask/change 日志中的值基于正则表达式匹配
Nginx - Hide/mask/change value in logs based on Regex match
MY API要求请求路径中使用email地址作为资源的标识,例如:
/api/users/john.smith@company.com
由于担心个人身份信息 (PII) 存储在日志中,我正在寻找一种方法来转换以下日志:
{ip_address} - - [04/Mar/2021:11:22:22 +0000] "GET /api/users/john.smith@company.com HTTP/1.1" 200 961 "{request_from}" etc.
进入如下内容:
{ip_address} - - [04/Mar/2021:11:22:22 +0000] "GET /api/users/*email_redacted* HTTP/1.1" 200 961 "{request_from}" etc.
我在标题中提到了基于正则表达式匹配来执行此操作,因为这似乎是检测电子邮件是否在初始日志中的明显方法。
我是 Nginx 的新手,所以 straight-forward 简洁的回复将不胜感激。非常感谢!
访问日志由 access_log
和 log_format
指令控制(详见 this document)。
默认情况下,访问日志记录 $request
变量的值,其中包含您要更改的字符串。
您可以使用 map
语句更改 $request
变量的文本,并使用 log_format
语句为使用编辑值的日志文件定义新格式.有关详细信息,请参阅 this document。
例如:
map $request $redacted {
default $request;
~^(?<prefix>.*)pattern(?<suffix>.*)$ $prefix*email_redacted*$suffix;
}
log_format redacted '$remote_addr - $remote_user [$time_local] '
'"$redacted" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /var/log/nginx/access.log redacted;
用匹配任何合法电子邮件地址的正则表达式替换上面的“模式”。
MY API要求请求路径中使用email地址作为资源的标识,例如:
/api/users/john.smith@company.com
由于担心个人身份信息 (PII) 存储在日志中,我正在寻找一种方法来转换以下日志:
{ip_address} - - [04/Mar/2021:11:22:22 +0000] "GET /api/users/john.smith@company.com HTTP/1.1" 200 961 "{request_from}" etc.
进入如下内容:
{ip_address} - - [04/Mar/2021:11:22:22 +0000] "GET /api/users/*email_redacted* HTTP/1.1" 200 961 "{request_from}" etc.
我在标题中提到了基于正则表达式匹配来执行此操作,因为这似乎是检测电子邮件是否在初始日志中的明显方法。
我是 Nginx 的新手,所以 straight-forward 简洁的回复将不胜感激。非常感谢!
访问日志由 access_log
和 log_format
指令控制(详见 this document)。
默认情况下,访问日志记录 $request
变量的值,其中包含您要更改的字符串。
您可以使用 map
语句更改 $request
变量的文本,并使用 log_format
语句为使用编辑值的日志文件定义新格式.有关详细信息,请参阅 this document。
例如:
map $request $redacted {
default $request;
~^(?<prefix>.*)pattern(?<suffix>.*)$ $prefix*email_redacted*$suffix;
}
log_format redacted '$remote_addr - $remote_user [$time_local] '
'"$redacted" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /var/log/nginx/access.log redacted;
用匹配任何合法电子邮件地址的正则表达式替换上面的“模式”。