如何配置Apache以不记录某些cookie?

时间:2012-12-14 17:06:59

标签: apache

我让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被记录?

1 个答案:

答案 0 :(得分: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