Excluir o registro de vários parâmetros de consulta no Nginx?

Excluir o registro de vários parâmetros de consulta no Nginx?

Esta questão é semelhante aExcluir um parâmetro de consulta específico do login no Nginx?mas para vários parâmetros. O que eu quero fazer é ofuscartodosparâmetros de consulta, que eu especifico, que estão presentes no URI da solicitação. Por exemplo, digamos que eu tenha a seguinte solicitação:

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

então eu gostaria dos doislatitude e longitudea ser ofuscado nos logs:

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

Se eu tentar definir o formato do log assim:

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

então apenas o último parâmetro da regex é levado em consideração e o resultado será:

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

qual énãoo que eu quero.

Então a questão é: como posso configurar o Nginx para ofuscartodosdos parâmetros fornecidos (consulta/uri) que defini?

Estou usando o Nginx 1.19.5.

Responder1

Você pode colocar mapinstruções em cascata. Pode não ser muito eficiente, mas é facilmente estendido. Além disso, você precisará usar capturas nomeadas, pois as capturas numéricas serão substituídas.

Por exemplo:

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

informação relacionada