我找到了一些在nginx日志中匿名IP的解决方案 - 比如这个 nginx中的匿名IP日志记录?
但这会将 IP 剥离到 C 子网。这太过分了。就我的目的而言,在我看来,如果 IP 的最后一个八位字节除以 2,下限并乘以 2 再一次,GDPR 编译就足够了。所以IP将不准确。
可以在nginx/map中完成此操作。我还没有任何运气。
在执行此操作之前,请查看其他法律,如果您的网站托管在欧盟,UE 指令 2002/58/EC 要求您在 6 个月到 2 年之间存储真实 IP 地址,具体取决于您在欧盟内的国家/地区。
如果您在欧盟托管您的网站,则只有在一段时间后才允许匿名或伪化 IP 地址。
有答案,不是纯粹的nginx,使用编译的perl。
nginx.conf
load_module /usr/local/libexec/nginx/ngx_http_perl_module.so;
(取决于操作系统 - 这是在freebsd上(
在 httpd {
perl_set $remote_addr_anon 'sub {
use POSIX;
my $r = shift;
my $str = $r->remote_addr;
my @ex = split(/./, $str);
if ( scalar @ex == 4 ) {
my $anon_ip = @ex[0] . "." . @ex[1] . "." . @ex[2] . "." . (floor(@ex[3]/2)*2) ;
return $anon_ip;
} else {
return "IPv6"
}
}';
log_format anonymized '$remote_addr_anon - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
然后在access_log中使用匿名访问日志格式。
我不使用IPv6,所以不关心它。如果你净化了这个,你可以,我不熟悉perl。