我需要在Apache的日志中对IP应用掩码。
例如,我有这个日志: 192.168.234.111 - - [18 / Oct / 2013:16:29:40 +0200]“GET ........”
我想保存: 192.168.234.xxx - - [18 / Oct / 2013:16:29:40 +0200]“GET ........”
要做第一个日志,我正在使用这样的日志格式。
LogFormat "%h %l %u %t" combined-syslog2
CustomLog /var/log/toto combined-syslog2
要获得第二个日志,我可以像这样管道perl / shell post脚本:
CustomLog |/usr/local/shl/apache_syslog2
但我对这个解决方案不满意。是否有可能用Apache做到这一点?
感谢。
埃里克
答案 0 :(得分:4)
它甚至可以进一步简化:
SetEnvIf
,即可基于Remote_Addr
创建一个环境变量。最后在您的LogFormat语句中引用变量(例如MASKED_IP_ADDR
),如下所示:
SetEnvIf Remote_Addr "((?:\d{1,3}\.){3})\d{1,3}" MASKED_IP_ADDR=$1XXX
LogFormat "%{MASKED_IP_ADDR}e %l %u %t" combined-syslog2
当然,您也可以使用正确的IP地址正则表达式:
^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3})(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
这一个捕获了前三个八位字节,因此最后一个可以被'XXX'
替换。
答案 1 :(得分:1)
以下是在Apache中执行此操作的方法:
RewriteCondition
RewriteRule
将部分IP + xxx存储在环境变量中(例如VARNAME
)LogFormat
%{VARNAME}e
声明中引用环境变量
<强>参考强>