查看对 apache 的 HTML 请求的标头

查看对 apache 的 HTML 请求的标头

有没有好的方法可以查看传入 Apache 的请求的详细版本?至少我想检查特定标头是否存在并检查其值。请求不是来自浏览器,因此查看它们发出的情况很棘手。我不确定我的自定义 HTTP 标头是否真的由客户端添加,因此调试我的 rewritecond 指令很困难。

答案1

您可以创建自定义包含标题的 LogFormat

%{Foobar}i :Foobar 的内容:发送到服务器的请求中的标头行。其他模块(例如 mod_headers)所做的更改会影响此内容。如果您对大多数模块修改请求标头之前的请求标头感兴趣,请使用 mod_setenvif 将标头复制到内部环境变量中,并使用上面描述的 %{VARNAME}e 记录该值。

然后重复使用日志格式在您的 AccessLog 指令上

LogFormat "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i " my_special_format
CustomLog logs/access_log_with_details my_special_format

或者甚至只用一行:

CustomLog logs/access_log_with_details "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i"

更新

关于 SetEnvIf 的说明:

这部分用于在任何内部重写开始时存储标头的值,然后,不是使用语法%{FOO}i在过程结束时提取标头,而是使用%{MyEnvVar}e在开始时备份的值来记录,这是记录环境变量的语法。

所以以这样的方式结束:

SetEnvIf MySpecialHeader "(.*)" BACKUPHEADER=$1
(... stuff and things ...)
CustomLog logs/access_log_with_details "init: %{BACKUPHEADER}e final: %{MySpecialHeader}i "

答案2

你也可以使用 mod_security 来实现:

http://static.askapache.com/httpd/mod_security/doc/modsecurity-manual.html#N107EE

LogFormat "%h %l %u %t \"%r\" %>s %{mod_security-body}n

答案3

2024 答案:使用mod_log_forensicForensicLog指令。此指令需要一个参数,通常是您要记录到的文件名。但要小心 - 文件名是相对于 的ServerRoot,可能未设置,并且可能默认为某个意想不到的地方,例如/etc/apache2

相关内容