排除 Nginx 中记录的特定查询参数?

排除 Nginx 中记录的特定查询参数?

我想知道是否可以将 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;
}

相关内容