2012-12-14 41 views
2

我有Apache作爲代理運行,我想將cookie字符串記錄爲通過代理髮送的請求的一部分,但我有某些Cookie因爲它們包含敏感信息而要排除。如何將Apache配置爲不記錄某些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的不足之處,有沒有一種方法可以排除cookies被記錄?

回答

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 
在你的虛擬主機

然後,添加這樣的:

CustomLog logs/access_log filtered env=FILTERED_COOKIES 
CustomLog logs/access_log common env=!FILTERED_COOKIES 
相關問題