如何在一个日志文件中从 Vhosts 捕获 IP 地址和用户代理

如何在一个日志文件中从 Vhosts 捕获 IP 地址和用户代理

目前,我的 Apache 2.4 httpd 文件中有许多虚拟主机。我希望能够捕获有关访问者和访问时间的更多信息,包括 access_log 中的 IP 地址和用户代理。

在 httpd conf 文件中我有以下内容:

` <IfModule log_config_module>
    # info from http://www.techstacks.com/howto/log-client-ip-and-xforwardedfor-ip-in-apache.html
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
    SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
    CustomLog "logs/access_log" combined env=!forwarded
    CustomLog "logs/access_log" proxy env=forwarded
</IfModule>

结果是:`目前,它显示以下内容:

`::1 - - [05/Aug/2016:02:49:26 +1200] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.23 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4 (internal dummy connection)"``

我也尝试了在这里和谷歌上找到的各种其他建议的配置,但到目前为止还没有任何运气。

我的理解是,由于日志记录指令在记录之外,因此它应该捕获指定的流量(详细内容在这里)——但是正如您从示例中看到的,它不起作用。

答案1

您发布的连接日志是内部连接,由 apache 用于保持工作进程处于活动状态。它实际上根本不是访问者!开箱即用的“组合”格式应默认为您提供您所需的日志条目。

那将是以下 LogFormat:

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

然后,在您的 VirtualHost 块中,您需要以下内容:

CustomLog /path/to/access_log combined

如果您使用反向代理缓存,这会变得更有趣,但诸如 mod-rpaf 之类的 apache 模块应该可以对此有所帮助。

相关内容