Nginx 日志格式

赋料扬雄敌,诗看子建亲。这篇文章主要讲述Nginx 日志格式相关的知识,希望能为你提供帮助。
?前言.?HTTP请求
nginx作为webserver和http的代理,处理的就是http请求。


http请求是是建立在tcp基础上的。
一个完整的http请求包括request和response两部分。
request组成:请求行,请求头,请求数据
response组成:状态行,消息报头,响应正文
我们可以在命令行查看一个完整的http请求 在linux服务器上执行以下:


curl -v http://www.baidu.com > /dev/null  


大于号部分是请求部分,小于号部分是响应部分


?一.Nginx日志格式(两个参数控制)?
1.log_format #用来定义记录日志的格式 (可以定义多种日志格式,取不同的名字)


                log_format log_name string(不同的字段)
2.accecc.log #用来指定日志文件的路径及使用的何种日志格式记录日志
              access_log       logs/access.log main;  


?二.Nginx日志类型?


包括:error.log 和 access_log


【Nginx 日志格式】error.log 主要是处理http请求错误和nginx本身服务错误状态,按照不同的错误级别记录


access_log 主要是记录处理每次http请求访问的状态


日志主要实现方式是使用 log_format


nginx记录的每次信息都可以当做一个变量,log_format就是将这些变量组合起来,记录到日志中去


?#我们看一下log_format的配置#?




Syntax: log_format name [escape=default|json] string …;
Default: log_format combined "...";
Context: http (约束log_format的配置位置)




?#我们看一下默认的log_format#?
log_format   main   $remote_addr - $remote_user [$time_local] "$request"
                  $status $body_bytes_sent "$http_referer"
                  "$http_user_agent" "$http_x_forwarded_for";


access_log   /var/log/nginx/access.log   main;  






?##默认的格式,基本都是单引号包裹着一些变量,还包括 中划线 - 方括号 [] 作为分隔符一起打印。每个变量含义如下#?


remote_addr:对应客户端的地址


remote_user:是请求客户端请求认证的用户名,如果没有开启认证模块的话是值为空。


time_local:表示访问时间与时区


request:表示用户的http请求起始行信息


status:表示response的返回状态 http状态码 记录请求返回的状态码例如(200 301 404等)


body_bytes_sent:表示从服务端返回给客户端的body数据大小(字节数)


http_referer:表示请求的上一级页面
(记录请求时从哪个连接访问过来的 可以根据此参数进行防盗链)


http_user_agent:表示agent信息 (记录客户端访问的信息 例如:浏览器 手机客户端等)


http_x_forwarded_for:当前端有代理服务器时 设置WEB节点记录客户端地址的配置
此参数生效前提是代理服务器也要进行相关的x_forwarded_for 设置   会记录每一级请求中信息

    推荐阅读