如何使用apache在请求头中loggingcookie的大小

我们的网站存在一个问题,Cookie变得太大。 我们现在已经扩大了可接受的标题大小,并限制了cookie的大小,但我想知道平均客户端的标题大小,特别是cookie的大小。

我创build了一个apache日志来捕获每个请求中设置的cookie:

LogFormat "%{Cookie}i" cookies 

但是这只是吐出标题中所有cookie的全部内容。

有没有办法让Apache只logging每个请求的大小(或只是string的长度)?

AFAIK不:(

但是你可以做的,而不是直接写入日志文件是使用Apaches能够使用pipe道和parsing的Apache日志行之前写入文件。

 ... LogFormat "%{Cookie}i" cookies CustomLog "| /usr/local/bin/cookiecutter.awk" cookies 

awk脚本示例可能如下所示:

 #! /bin/awk -f # /usr/local/bin/cookiecutter.awk { print length($0) >> "/var/log/apache/cookielength_log" } 

诸如浏览器标识string之类的其他字段也可能会有用,请使用您的想象力。

可以logging超过一定长度的cookie的内容,而不是loggingcookie大小。 注意:这个解决scheme需要apache 2.4。

假设你想logging8190字节(这是LimitRequestFieldSize的默认值)以上的cookie,在httpd.conf中使用这个

 # Increase LimitRequestFieldSize so it'll let cookies above 8190 pass LimitRequestFieldSize 12000 # Set an environment variable if the value of the Cookie header # matches a string with more than 8190 characters SetEnvIfExpr "req('Cookie') =~ /^.{8190,}$/" COOKIE_ABOVE_LIMIT # Define a log format that logs the cookie contents LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\" \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" %{ms}T" log_cookie # Create a conditional log rule that will log only if the # the environment variable is set CustomLog "/var/log/httpd/cookie_above_limit_log" log_cookie env=COOKIE_ABOVE_LIMIT