Mehrere Abfrageparameter von der Protokollierung in Nginx ausschließen?

Mehrere Abfrageparameter von der Protokollierung in Nginx ausschließen?

Diese Frage ähneltEinen bestimmten Abfrageparameter von der Protokollierung in Nginx ausschließen?aber für mehrere Parameter. Was ich tun möchte, ist zu verschleiernalleAbfrageparameter, die ich angebe und die in der Anforderungs-URI vorhanden sind. Nehmen wir beispielsweise an, ich habe die folgende Anforderung:

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

dann hätte ich gerne beideslatitude Und longitudein den Protokollen verschleiert werden:

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

Wenn ich versuche, das Protokollformat wie folgt zu definieren:

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

dann wird nur der letzte Parameter im regulären Ausdruck berücksichtigt und das Ergebnis ist:

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

welches istnichtwas ich möchte.

Die Frage ist also, wie kann ich Nginx so konfigurieren, dass es verschleiertalleder gegebenen (Abfrage/URI)-Parameter, die ich definiert habe?

Ich verwende Nginx 1.19.5.

Antwort1

Sie können mapAnweisungen kaskadieren. Das ist zwar nicht sehr effizient, lässt sich aber leicht erweitern. Außerdem müssen Sie benannte Captures verwenden, da die numerischen Captures überschrieben werden.

Zum Beispiel:

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

verwandte Informationen