设为首页 收藏本站
查看: 1310|回复: 0

[经验分享] nginx 日志中记录http响应头

[复制链接]

尚未签到

发表于 2016-12-26 08:58:20 | 显示全部楼层 |阅读模式
  背景:一个很简单的静态下载站点,每个文件都比较大,一般为30M+,现在想通过日志统计每个文件的下载完整情况。初步计划是在nginx日志中除了将下载的字节数之外,还要将原始文件的大小记录下来。不过如有range的请求情况下,这个值也不是很准确,但是有另外一个规律可寻,详见后面的测试结果。
  google了大半天,发现nginx的log_format没有现成的变量将Content-Length记录下来,唯一的几篇抄来抄去的文章说是用$content_length,试过了这个变量是取不到header里面的Content-Length头的,
  各种不靠谱,各种坑爹。
  后来搜到了淘宝github上的一个文档

sent_http    ngx_http_variable_unknown_header_out
  凭空感觉如果nginx内置变量记录到日志中的情况下,变量可以试试添加前缀sent_http,尝试了一下果然可以。
  下面是测试情况:
  原始文件大小为:43912736

# curl -I http://localhost/sudops.com.testfile.zip
HTTP/1.1 200 OK
Server: Nginx
Date: Wed, 27 Aug 2014 08:39:08 GMT
Content-Type: application/octet-stream
Content-Length: 43912736
Last-Modified: Tue, 19 Aug 2014 02:49:32 GMT
Connection: keep-alive
Xdebug: mytestnginx
Accept-Ranges: bytes
  nginx.conf日志格式

    log_format  sudops_logs  '$remote_addr - $remote_user [$time_local] "$request" "$request_body" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for "$content_length" "$http_content_length" "$sent_http_content_length"';
  从测试情况来看起作用的是”$sent_http_content_length,
  $content_length” “$http_content_length”这两个均取不到值,网上的一些说法都有些误导。
  一次性完整下载测试的日志:

10.233.11.107 - - [27/Aug/2014:16:37:56 +0800] "GET /sudops.com.testfile HTTP/1.0" "-" 200 43912736 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "43912736"
  断点续传测试的日志:

10.233.11.107 - - [27/Aug/2014:16:36:25 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 200 2420430 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "43912736"
10.233.11.107 - - [27/Aug/2014:16:36:27 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 7203351 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "41531726"
10.233.11.107 - - [27/Aug/2014:16:36:29 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 4873191 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "34405755"
10.233.11.107 - - [27/Aug/2014:16:36:31 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 9285310 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "29582204"
10.233.11.107 - - [27/Aug/2014:16:36:33 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 2345930 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "20364054"
10.233.11.107 - - [27/Aug/2014:16:36:40 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 9590450 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "18088204"
10.233.11.107 - - [27/Aug/2014:16:36:42 +0800] "GET /sudops.com.testfile.zip HTTP/1.0" "-" 206 8551774 "-" "Wget/1.11.4 Red Hat modified" - "-" "-" "8551774"
  这个结果看上去很有规律,在断点续传情况下,range的作用会导致请求字节数有些叠加,总体来讲206+200的下载字节数之和基本等于初始文件大小。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-319418-1-1.html 上篇帖子: nginx图片服务器的架构方案 下篇帖子: Ruby On Rails, Thin and Nginx on Windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表