Nginx: IP-Adresse nicht in Log-Files speichern

Wer aus Datenschutzgründen – DSGVO ist das Stichwort – möglichst wenige Daten speichern will, kann ein entsprechendes Logfile-Format definieren. Damit werden sowohl IPv4- als auch IPv6-Adressen anonymisiert.

Für die Error-Logs lässt sich leider kein neues Format definieren – hier kann man jedoch auch bei ausreichend kurzer Speicherfrist ein berechtigtes Interesse zum reibungslosen Betrieb annehmen. Die Einrichtung der anonymisierten Logfiles ist einfach: folgender Code wird in die zentrale nginx.conf eingefügt, dadurch werden bei IPv4-Adressen die letzten drei Ziffern durch „0“ ersetzt, bei IPv6-Adressen werden ebenfalls die letzten beiden Blöcke gelöscht.

map $remote_addr $ip_anonym1 {
default 0.0.0;
"~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" $ip;
"~(?P<ip>[^:]+:[^:]+):" $ip;
}

map $remote_addr $ip_anonym2 {
default .0;
"~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" .0;
"~(?P<ip>[^:]+:[^:]+):" ::;
}

map $ip_anonym1$ip_anonym2 $ip_anonymized {
default 0.0.0.0;
"~(?P<ip>.*)" $ip;
}

log_format anonymized '$ip_anonymized - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log anonymized;

Für die einzelnen Virtualhosts wird nun jeweils in der Access-Log-Zeile der Eintrag „anonymized“ hinzugefügt. Danach müssen einmal alle alten Logfiles gelöscht werden. Ab dem nächsten Server-Neustart werden dann die reduzierten Logfiles gespeichert, ansonsten funktioniert alles wie gewohnt. In Sachen Datenschutz ist man damit etwas näher an einer „sauberen Lösung“, die ganz im Sinne der EU-DSGVO-Datensparsamkeit ist. Diese Lösung wird auch auf diesem Server angewendet.