logging使用 是否可以使用Apache记录所有HTTP请求标头?



commons-logging作用 (3)

如果您有兴趣查看远程客户端向服务器发送哪些特定标头,并且您可以使请求运行CGI脚本,那么最简单的解决方案是让您的服务器脚本将环境变量转储到某个文件中。

例如,在脚本中运行shell命令“env> / tmp / headers”

然后,查找以HTTP _...开头的环境变量。

你会看到如下行:

HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_CACHE_CONTROL=max-age=0

其中每个代表一个请求标头。

请注意,标题名称是从实际请求中修改的。 例如,“Accept-Language”变为“HTTP_ACCEPT_LANGUAGE”,依此类推。

如何在日志文件中记录apache收到的HTTP请求头(全部)的内容?

目前我的apache组合日志格式配置是:

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

我知道可以这样做:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined

但它不合逻辑,不可能知道哪个标题。


Answer #1

mod_log_forensic是您想要的,但默认情况下,您的Apache安装可能不包含/可用。

这是如何使用它。

LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so 
<IfModule log_forensic_module> 
ForensicLog /var/log/httpd/forensic_log 
</IfModule> 

Answer #2

以下是所有http-header的列表:http: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

以下是所有apache-logformats的列表: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formatshttp://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats

正如您所写的那样,用于记录特定标头的代码是%{foobar} i,其中foobar是标头的名称。 因此,唯一的解决方案是创建特定的格式字符串。 当你期望像x-my-nonstandard-header这样的非标准头文件时,请使用%{x-my-nonstandard-header}i 。 如果您的服务器要忽略这个非标准头,为什么要将它写入您的日志文件? 未知的标题对您的系统完全没有影响。





logging