当前位置: 首页 > linux, 系统 > 正文

nginx 日志中记录http响应头

背景:一个很简单的静态下载站点,每个文件都比较大,一般为30M+,现在想通过日志统计每个文件的下载完整情况。初步计划是在nginx日志中除了将下载的字节数之外,还要将原始文件的大小记录下来。不过如有range的请求情况下,这个值也不是很准确,但是有另外一个规律可寻,详见后面的测试结果。

google了大半天,发现nginx的log_format没有现成的变量将Content-Length记录下来,唯一的几篇抄来抄去的文章说是用$content_length,试过了这个变量是取不到header里面的Content-Length头的,
各种不靠谱,各种坑爹。

后来搜到了淘宝github上的一个文档

凭空感觉如果nginx内置变量记录到日志中的情况下,变量可以试试添加前缀sent_http,尝试了一下果然可以。

下面是测试情况:

原始文件大小为:43912736

nginx.conf日志格式

从测试情况来看起作用的是”$sent_http_content_length,
$content_length” “$http_content_length”这两个均取不到值,网上的一些说法都有些误导。

一次性完整下载测试的日志:

断点续传测试的日志:

这个结果看上去很有规律,在断点续传情况下,range的作用会导致请求字节数有些叠加,总体来讲206+200的下载字节数之和基本等于初始文件大小。

本文固定链接: https://www.sudops.com/nginx-log-format-http-header-content-length.html | 运维·速度

该日志由 Fisher 于2014年08月27日发表在 linux, 系统 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: nginx 日志中记录http响应头 | 运维·速度
关键字:

nginx 日志中记录http响应头:目前有2 条留言

  1. 沙发
    咔咔西:

    $content_length是打印请求报文头部的content-length。不是响应头部的

    2018-04-25 16:43 [回复]
    • Fisher:

      正解

      2018-05-08 13:21 [回复]

发表评论


Time limit is exhausted. Please reload the CAPTCHA.

快捷键:Ctrl+Enter