¿Excluir múltiples parámetros de consulta para que no se registren en Nginx?

¿Excluir múltiples parámetros de consulta para que no se registren en Nginx?

Esta pregunta es similar a¿Excluir un parámetro de consulta específico para que no se inicie sesión en Nginx?pero para múltiples parámetros. Lo que quiero hacer es ofuscartodoparámetros de consulta, que especifico, que están presentes en el URI de solicitud. Por ejemplo, digamos que tengo la siguiente solicitud:

GET /index.html?latitude=55.70&longitude=32.2341&otherkey=value HTTP/1.1

entonces me gustaria amboslatitude y longitudepara ser ofuscado en los registros:

GET /index.html?latitude=***&longitude=***&otherkey=value HTTP/1.1

Si intento definir el formato de registro de esta manera:

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;
}

entonces solo se tiene en cuenta el último parámetro de la expresión regular y el resultado será:

GET /index.html?latitude=55.70&longitude=***&otherkey=value HTTP/1.1

cual esnolo que quiero.

Entonces la pregunta es, ¿cómo puedo configurar Nginx para ofuscar?todode los parámetros dados (consulta/uri) que he definido?

Estoy usando Nginx 1.19.5.

Respuesta1

Puede realizar mapdeclaraciones en cascada. Puede que no sea muy eficiente, pero se puede ampliar fácilmente. Además, deberá utilizar capturas con nombre, ya que las capturas numéricas se sobrescribirán.

Por ejemplo:

map $request $custom1 {
    ~^(?<prefix1>.*[\?&]latitude=)([^&]*)(?<suffix1>.*)$  "${prefix1}***$suffix1";
    default                                               $request;
}
map $custom1 $customrequest {
    ~^(?<prefix2>.*[\?&]longitude=)([^&]*)(?<suffix2>.*)$ "${prefix2}***$suffix2";
    default                                               $custom1;
}

información relacionada