2

我有 Apache 作为代理运行,我想将 cookie 字符串记录为通过代理发出的请求的一部分,但我有一些我想排除的 cookie,因为它们包含敏感信息。

我知道 Apache mod_log_config 允许使用以下命令记录整个 cookie 字符串:

  %{Cookie}i

我可以使用以下命令记录一个特定的 cookie:

  %{Foobar}C

但我想记录某些 cookie 之外的所有内容(如果存在)。我尝试的一种可能的策略是使用 SetEnvIf 与 %{FOO}e 结合使用,它会打印一个环境变量,例如:

  SetEnvIf = Cookie "(.*?)(Foobar=([^\s;]*;? ?))?(.*)" FILTERED_COOKIES=$1$4

  %{FILTERED_COOKIES}e

如果 Foobar 存在于 cookie 字符串中,这很有效,但如果 Foobar 不存在,如果只记录一个“-”,那么我不会得到所有其他 cookie。

我的正则表达式可能很差,但它似乎在匹配的情况下工作,但 Apache 在不匹配的情况下似乎没有正确处理它。

除了编写自定义 Apache mod,有没有办法排除 cookie 被记录?

4

1 回答 1

1

一种方法是使用多种日志格式。在您的主配置文件中:

SetEnvIf Cookie "(.*?)(Foobar=([^\s;]*;? ?))?(.*)" FILTERED_COOKIES=$1$4
LogFormat "%h %l %u %t \"%r\" %>s %b %{Cookie}i" common
LogFormat "%h %l %u %t \"%r\" %>s %b %{FILTERED_COOKIES}e" filtered

然后在您的 VirtualHost 中,添加如下内容:

CustomLog logs/access_log filtered env=FILTERED_COOKIES
CustomLog logs/access_log common env=!FILTERED_COOKIES
于 2013-11-09T08:08:36.533 回答