Nginx-基于正则表达式匹配在日志中隐藏/屏蔽/更改值

Nginx-基于正则表达式匹配在日志中隐藏/屏蔽/更改值,nginx,logging,server,nginx-reverse-proxy,nginx-config,Nginx,Logging,Server,Nginx Reverse Proxy,Nginx Config,MY API要求在请求路径中使用电子邮件地址作为资源的标识符,例如: /api/users/john.smith@company.com map $request $redacted { default $request; ~^(?<prefix>.*)pattern(?<suffix>.*)$ $prefix*email_redacted*$suffix; } log_format redacted '$remote_addr - $remote_u

MY API要求在请求路径中使用电子邮件地址作为资源的标识符,例如:

/api/users/john.smith@company.com
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;
由于担心日志中存储的个人身份信息(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非常陌生,因此非常感谢您直接简洁的回答。非常感谢

访问日志由
access\u log
log\u format
指令控制(有关详细信息,请参阅)

默认情况下,访问日志记录
$request
变量的值,该变量包含要更改的字符串

您可以使用
map
语句更改
$request
变量的文本,并使用
log\u format
语句为使用修订值的日志文件定义新格式。有关详细信息,请参阅

例如:

/api/users/john.smith@company.com
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;
map$request$redact{
默认$request;
~^(?.*)模式(?.*$$前缀*电子邮件_编辑*$后缀;
}
日志格式已编辑“$remote\u addr-$remote\u user[$time\u local]”
“$redact”$status$bytes\u sent”
“$http_referer”“$http_user_agent”“$gzip_ratio””;
access\u log/var/log/nginx/access.log已编辑;

将上面的“模式”替换为与任何合法电子邮件地址匹配的正则表达式。

嗨,Richard,非常感谢您的回复;是像你这样的人经营这个网站!明天我将有机会测试这个实现,尽管基于您的回答是否简洁明了,我相信它会起作用。我将标记为正确的答案,一旦我已经实施,可以100%确认。再次感谢!