如何在Apache日志中获取响应头Content-Length字段的数值
问题原因
Apache默认访问日志中记录的响应大小字段为%b,该字段统计的是压缩前的原始响应体大小,而你在浏览器抓包看到的Content-Length是开启gzip压缩后的实际传输大小。由于不同客户端支持的压缩规则不同(部分老旧客户端不支持gzip会返回未压缩内容),因此日志记录的数值会随客户端变化,和响应头数值不一致。
解决步骤
- 定位Apache日志配置文件
Ubuntu/Debian发行版默认路径为/etc/apache2/apache2.conf或/etc/apache2/conf-available/other-vhosts-access-log.conf;CentOS/RHEL发行版默认路径为/etc/httpd/conf/httpd.conf。 - 修改LogFormat配置
将默认日志格式中代表响应大小的%b参数,替换为%{Content-Length}o,该参数会直接读取响应头的Content-Length值写入日志。
示例修改:
原combined日志格式配置:
修改后:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %{Content-Length}o \"%{Referer}i\" \"%{User-Agent}i\"" combined - 生效配置
先执行配置校验命令,避免语法错误导致服务异常:
Debian/Ubuntu:apache2ctl configtest
CentOS/RHEL:httpd -t
校验返回Syntax OK后,重启Apache服务生效:
Debian/Ubuntu:systemctl restart apache2
CentOS/RHEL:systemctl restart httpd
注意事项
如果你的站点配置了独立虚拟主机,且虚拟主机内单独指定了CustomLog日志格式,需要同步修改虚拟主机内对应的格式参数。
内容的提问来源于stack exchange,提问作者2WFR
相关产品推荐
相关产品推荐

