
Этот вопрос похож наИсключить определенный параметр запроса из регистрации в Nginx?но для нескольких параметров. Я хочу запутатьвсепараметры запроса, которые я указываю, которые присутствуют в URI запроса. Например, предположим, что у меня есть следующий запрос:
GET /index.html?latitude=55.70&longitude=32.2341&otherkey=value HTTP/1.1
тогда я хотел бы обаlatitude
и longitude
быть замаскированным в журналах:
GET /index.html?latitude=***&longitude=***&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=|longitude=)([^&]*)(.*)$ "$1$2***$4";
default $request;
}
тогда учитывается только последний параметр в регулярном выражении и результат будет следующим:
GET /index.html?latitude=55.70&longitude=***&otherkey=value HTTP/1.1
которыйнетчто я хочу.
Итак, вопрос в том, как мне настроить Nginx для обфускациивсезаданных параметров (запроса/uri), которые я определил?
Я использую Nginx 1.19.5.
решение1
Вы можете каскадировать map
операторы. Это может быть не очень эффективно, но легко расширяется. Кроме того, вам нужно будет использовать именованные захваты, так как числовые захваты будут перезаписаны.
Например:
map $request $custom1 {
~^(?<prefix1>.*[\?&]latitude=)([^&]*)(?<suffix1>.*)$ "${prefix1}***$suffix1";
default $request;
}
map $custom1 $customrequest {
~^(?<prefix2>.*[\?&]longitude=)([^&]*)(?<suffix2>.*)$ "${prefix2}***$suffix2";
default $custom1;
}