`

nginx 日志中记录http响应头

 
阅读更多

       背景:一个很简单的静态下载站点,每个文件都比较大,一般为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的下载字节数之和基本等于初始文件大小。

分享到:
评论

相关推荐

    Nginx日志分析工具2.1.0.zip

    访问日志记录了客户端对服务器的所有请求,包括请求时间、客户端IP、请求方法、请求URL、HTTP状态码、返回字节数等信息,这对于理解网站流量、优化页面加载速度、识别恶意请求等非常有帮助。错误日志则记录了服务器...

    Nginx日志管理介绍

    Nginx日志描述 通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的...

    nginx网站访问日志可视化

    总的来说,"nginx网站访问日志可视化"项目展示了如何利用Python的处理能力、数据库的存储优势,以及pyecharts的可视化特性,从Nginx日志中挖掘有价值的信息,并以直观的方式呈现出来。这不仅对于系统运维人员监控和...

    nginx-0.8.20关闭日志记录版

    在这个版本——Nginx 0.8.20 中,它被特别配置为关闭了日志记录功能,这在某些场景下非常有用,例如测试环境或对隐私保护有特殊需求的服务器部署。 1. **Nginx 版本历史** Nginx 0.8.20 发布于2010年,是 Nginx ...

    Nginx日志分析工具_seo必备网站百度蜘蛛抓取记录查询

    Nginx日志分析工具是SEO优化过程中至关重要的一环,对于网站管理员而言,它能够提供宝贵的洞察力,帮助他们理解搜索引擎如何与他们的网站互动,尤其是百度蜘蛛的抓取行为。Nginx作为一款广泛使用的高性能Web服务器,...

    Linux服务器nginx访问日志里出现大量http 400错误的请求分析

    服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – ...

    Web应用安全:Nginx日志配置实验.doc

    默认情况下,Nginx已经配置了日志记录,但为了确保服务正常运行,我们需要在`http{}`块中添加或确认以下日志配置: ```nginx log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$...

    Nginx日志自定义记录以及启用日志缓冲区详解

    其中,日志记录功能是Nginx服务器管理中不可或缺的一环,它帮助管理员监控服务器状态以及用户行为。日志自定义记录和启用日志缓冲区是提高Nginx性能和日志管理效率的重要手段。 日志自定义记录允许管理员根据需要...

    nginx日志分析技巧.zip

    针对“nginx日志分析技巧”,我们可以深入探讨多个方面,这些都与提供的文件名紧密相关。 首先,**IP统计**是基础的数据收集环节。通过分析nginx的日志,我们可以获取到每个访问者的IP地址,进而统计出最频繁的访问...

    nginx日志切割.rar

    访问日志记录了客户端的请求信息,包括请求时间、请求的URL、响应状态码等;错误日志则记录了服务器运行过程中遇到的问题。Nginx允许自定义日志格式,通过`log_format`指令定义。 二、日志切割原理 日志切割通常...

    Flume采集Nginx日志到新版Hive.rar

    首先,Nginx是一款高性能的HTTP和反向代理服务器,它的日志记录了服务器的各种活动,如请求、响应时间、用户行为等,是进行数据分析的重要来源。Nginx的日志格式通常是自定义的,常见的有access.log,记录了客户端的...

    详解Nginx日志配置及日志切割

    在Nginx服务器中,日志记录是十分重要的功能,它能够帮助管理员分析访问模式、监控系统状态、诊断错误等。本文将对Nginx日志配置及日志切割进行详细介绍。 首先,Nginx提供了多种日志配置指令,这些指令可以定义...

    nginx日志文件切割

    **Nginx日志文件切割**是Web服务器管理中的一个重要环节,主要目的是为了定期归档、管理和优化存储空间。在高访问量的网站环境中,Nginx的日志文件可能会迅速增长,如果不进行适当的切割,可能会导致硬盘空间耗尽,...

    nginx服务器中access_log日志分析与配置详解

    在Nginx服务器中,Access Log是记录客户端请求的重要日志,它包含了丰富的信息,可用于分析用户行为、优化网站性能和排查问题。了解和掌握Access Log的分析与配置对于任何Web服务的运维人员来说都至关重要。 1. **...

    nginx日志中添加请求的response日志(推荐)

    在`http`块中定义一个自定义的日志格式,这允许记录响应体。然后在`server`块中,我们使用`body_filter_by_lua`指令来截取响应体,并将其存储在`resp_body`变量中。这样配置后,Nginx将记录每个请求的响应内容。 ...

    06_Python3处理Nginx日志.zip

    Nginx日志是记录Web服务器活动的重要工具,其中包含了访问者的信息、请求的URL、响应状态码等关键数据。Python的强大之处在于它提供了丰富的库和工具,使得解析和分析这些日志变得简单易行。 首先,了解Nginx日志...

    利用nginx访问日志如何记录mysql中的用户id详解

    这篇文档主要讲解了如何利用Nginx的访问日志记录MySQL数据库中的用户ID,以便于跟踪和理解用户活动。以下是对该主题的详细阐述: 首先,Nginx作为一款流行的Web服务器,其默认的日志格式只包含客户端的IP地址、...

    Nginx自动日志切割

    日志记录了服务器的运行情况,包括但不限于客户端请求、响应状态、流量等信息,对于监控、故障排查和性能优化有着不可替代的作用。Nginx自动日志切割是解决日志文件过大,占用磁盘空间,以及方便历史数据检索的有效...

    Nginx设置日志打印post请求参数的方法

    1. **全面性**:Nginx日志记录了访问者IP、浏览器信息、请求参数等,提供了比Java请求日志更全面的信息。 2. **性能优化**:当请求量过大导致Java应用无法及时处理时,Nginx的日志可以帮助分析流量,排查问题,优化...

    nginx-ingress 日志持久化

    在Kubernetes环境中,Nginx Ingress Controller是一个关键组件,用于处理集群的外部访问路由,同时它也负责日志记录。日志对于监控、故障排查和审计至关重要。本篇文章将详细探讨Nginx Ingress Controller的日志持久...

Global site tag (gtag.js) - Google Analytics