带有正则表达式的 apache 自定义日志格式

带有正则表达式的 apache 自定义日志格式

我们有 apache webserver 作为传入流量的“入口”,然后它使用 mod_jk 委托给 tomcats。

我们要记录 HTTP 摘要用户名、示例标头:

Authorization: Digest username="Mufasa",
                     realm="[email protected]",
                     nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                     ...

不幸的是使用 '%u' 不起作用如所述我的猜测是,当我们在 tomcat 端进行身份验证时(apache 使用 mod_jk 将调用委托给 tomcat),apache 自己的日志记录工具不知道如何访问 digest-username(因为自己的身份验证模块被绕过了)。

要解决这个问题:是否有一个自定义日志格式表达式与正则表达式匹配,例如告诉提取用户名="(.*?)"从“授权”标题推送到日志?

答案1

SetEnvIf Authorization username="([^"]+)" digest_username=$1
LogFormat "%h %l %{digest_username}e %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_with_user
CustomLog /path/to/log combined_with_user

还没有测试过,所以不确定 Apache 是否会因为引号而阻塞SetEnvIf(它们可能需要转义) - 但这应该非常接近。

相关内容