Nginx 日志格式

Posted chenglei1208

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


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 设置  会记录每一级请求中信息

以上是关于Nginx 日志格式的主要内容,如果未能解决你的问题,请参考以下文章

nginx之旅(第二篇):nginx日志管理nginx防盗链nginx虚拟主机

Nginx访问日志(access_log)配置

请教nginx日志分析

Nginx日志分析

nginx日志格式字段

nginx日志报错:check shm error!