我们有 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
(它们可能需要转义) - 但这应该非常接近。