Anche se esiste già una risposta accettata, la soluzione sembra non essere valida.
D'altra parte abbiamo un se direttiva, che ha una contesto di server e posizione.
Così non possiamo usare “se” e “log_format” all'interno di una sezione del server (che è fatto all'interno della soluzione accettata)
Così il se non è disponibile qui, anche se è il male (http://wiki.nginx.org/IfIsEvil)! Abbiamo bisogno di qualcosa che sta lavorando a contesto http perché solo lì il log_format può essere definito in modo valido, e questo è l'unico luogo al di fuori del contesto del server, in cui sono definiti i nostri host virtuali ...
Per fortuna c'è una funzione mappa all'interno di nginx! mappa sta rimappando alcuni valori in nuovi valori (accessibili all'interno di variabili che possono essere utilizzate in una direttiva log_format). E il buon messaggio: funziona anche con espressioni regolari.
Quindi mappiamo i nostri indirizzi IPv4 e IPv6 in indirizzi anonimi. Questo deve essere fatto in 3 passi, poiché la mappa non può accumulare valori restituiti, può solo restituire stringhe o variabili, non una combinazione di entrambi.
Quindi, per prima cosa prendiamo la parte dell'IP che vogliamo avere nei file di log, la seconda mappa restituisce la parte che simboleggia la parte anonimizzata e la terza regola della mappa li mappa di nuovo insieme.
Ecco le regole che vanno nel contesto http {}:
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;
Dopo aver aggiunto questo al vostro file di configurazione nginx.conf, ricordarsi di ricaricare la nginx. I file di registro dovrebbero ora contenere indirizzi IP anoimizzati, se si utilizza il formato di registro "anonimo" (questo è il parametro di formato della direttiva access_log).
correlati (apache): http://serverfault.com/q/343031/75968 – cweiske