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