我试图使用管道日志匿名化我的apache(2.4.25)日志。我在vServer上运行Debian9。
所以在我的apache2.conf中我得到了这个:
LogFormat "%t : %h : \"%v:%p\" \"%r\" \"%{User-Agent}i\" %>s %B" anonym
CustomLog "|/opt/anon_logs.sh" anonym
在/opt/anon_logs.sh中我把这个:
#!/bin/bash
# /opt/anon_logs.sh
# read from stdin
read logline
# remove the inner numbers of the IP with sed
anon=$( echo $logline | sed -r 's/\.([0-9]{1,3})\.([0-9]{1,3})\./.xxx.xxx./g' )
# write the result back into apache access.log
echo $anon >> /var/log/apache2/access.log
在我的虚拟主持人中,我得到了这个:
CustomLog ${APACHE_LOG_DIR}/access.log anonym
根本没有变化。
在我的虚拟主持人中,我得到了这个:
CustomLog "|/opt/anon_logs.sh" anonym
这是唯一一种在error.log中生成错误的方法:
AH00106: piped log program '/opt/anon_logs.sh' failed unexpectedly
我猜,脚本缺失了,能够作为后台进程运行。任何有关这方面的帮助也将受到赞赏!但它确实做到了!在我的access.log中,我现在发现IP减少到123.xxx.xxx.456
在我的虚拟主持人中,我得到了这个:
CustomLog "|$ sed -r 's/.[0-9]{1,3}.[0-9]{1,3}./.xxx.xxx./g' >> /var/log/apache2/access.log" anonym
根本没有变化。
方法1和3导致无任何变化。我在日志中找到了完整的IP。
现在,如果我通过此脚本回显access.log中的一行,我会在access.log中找到一条匿名行。
error.log在方法1和方法3上没有显示任何内容。
我错过了什么?
不幸的是,mod_removeip是没有选择的,因为它也将php语言化。我仍然希望能够区分不同的请求/客户端。我只是希望在我的访问者的隐私和一些可以看到我的Apache上发生的事情之间做出妥协...