Apache 日志文件 x-forwarded-for CSV 操作

Apache 日志文件 x-forwarded-for CSV 操作

我正在使用%{X-FORWARDED-FOR}i格式化程序记录 x-forwarded-for。但是,有时 X-Forwarded-For 标头会变成 CSV(基于客户端的设置):

X-Forwarded-For: 66.66.66.66, 123.123.123.123

其在日志文件中显示为上述 CSV 格式的 IP。

有什么方法可以配置 Apache,以便我仅记录最左边的 IP 地址?这是我唯一关心的。

答案1

是的。您可以使用正则表达式来提取最左边的 IP:

SetEnvIf X-Forwarded-For "^(\d{1,3}+\.\d{1,3}+\.\d{1,3}+\.\d{1,3}+).*" XFFCLIENTIP=$1

注意使用1 美元设置 XFFCLIENTIP 环境变量来保存正则表达式中第一组的内容(在括号中)然后,您可以定义使用该变量的日志格式:此示例是我们在 nearmap.com 内部使用的示例,因此它会记录额外的信息,但您想要的是%{XFFCLIENTIP}e在开头。注意环境=XFFCLIENTIP在行尾,这意味着仅当设置了环境变量时才使用此格式。

CustomLog /var/log/apache2/access.log "%{XFFCLIENTIP}e \"%{session}C\" \"%{nearmapuid}C\" %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" env=XFFCLIENTIP

相关内容