我想知道是否可以将 URI 中的特定查询参数排除在 Nginx 访问日志之外?
这是我们当前的配置:
log_format main '$remote_addr - $remote_user [$time_local] $host "$request" '
'$status $body_bytes_sent $request_time "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
无论请求路径如何,假设我希望将“纬度”参数排除在记录之外(或者最好对其进行混淆)。我知道我可以排除全部通过将“$request”更改为例如“$request_method $uri”来查询参数,但随后我失去了全部这不是我想要的参数。
更新:
我想要GET /index.html?latitude=43.4321&otherkey=value HTTP/1.1
混淆如下内容:GET /index.html?latitude=******&otherkey=value HTTP/1.1
答案1
GET /index.html?key=latitude&otherkey=value HTTP/1.1
变成
GET /index.html?key=***&otherkey=value HTTP/1.1
代码如下:
log_format main '$remote_addr - $remote_user [$time_local] $host "$customrequest" '
'$status $body_bytes_sent $request_time "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
map $request $customrequest {
~^(.*)(latitude)(.*)$ "$1***$3";
default $request;
}
您可以添加多个关键字,如下所示:~^(.*)(latitude|dell|inspiron)(.*)$
编辑:
在注释中指定后,正则表达式需要修改:
GET /index.html?latitude=5570&otherkey=value HTTP/1.1
变成
GET /index.html?latitude=***&otherkey=value HTTP/1.1
map $request $customrequest {
~^(.*)([\?&]latitude=)([^&]*)(.*)$ "$1$2***$4";
default $request;
}