Исключить несколько параметров запроса из регистрации в Nginx?

Исключить несколько параметров запроса из регистрации в Nginx?

Этот вопрос похож наИсключить определенный параметр запроса из регистрации в 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;
}

Связанный контент