我们的网站存在一个问题,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