Nginx日志模块

官方地址:
1)http://nginx.org/en/docs/http/ngx_http_log_module.html (大概日志文件模版)
2)https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status (日志变量)

日志模板:http_log_module

语法:

Syntax:	access_log path [format [buffer=size] [gzip[=level][flush=time] [if=condition]];
			access_log off;
Default:	access_log logs/access.log combined;
Context:	http, server, location, if in location, limit_except

Nginx日志模块_第1张图片

一、介绍nginx配置文件自带的日志模块
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

对于nginx默认的加载模板进行解释:

#$remote_addr 客户端地址

$remote_user HTTP客户端请求nginx认证用户名

[$time_local] nginx时间——返回时间通用日志格式的本地时间

#$request 完整的原始请求行(GET、POST请求方式)

#$status 回应请求状态 200、301、302、403、404、500、502、504 这些状态的大概产生的的情况需要了解

#$body_bytes_sent 发送到客户端的字节数,不包括响应头; 此变量与 Apache模块 的“ %B”参数 兼容mod_log_config

#$http_referer 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的

#$http_user_agent httpd头部信息,客户端访问设备,记录真实的IP地址。 (使用键进入开发者工具模式,选择network网络使用进行刷新,查看获取User-Agent:的请求浏览器类型。爬虫使用,简单的爬虫)

“$http_x_forwarded_for” http请求携带的http信息

#$realip_remote_addr 保留原始客户端地址

#$realip_remote_port 保留原始客户端端口

二、测试查看
1)nginx配置日志文件

2)产生数据,生成nginx日志信息

OK。我们知道只要用用户访问网址就会产生访问的日志:

access.log ——> 正确日志(用户访问信息)

error.log ——> 错误日志(启动报错信息,访问请求错误信息)

对于上面两个文件是非常有用的,以后使用ELK日志分析处理

现在去浏览器访问测试机器的IP: 192.168.11.169

便于观察可使用查看此命令进行观察情况:命令:tailf /var/log/nginx/access.log

对比下,产生的日志文件具有定义的mian变量模板(8个数值)。

192.168.11.1  #客户端IP

-      #HTTP客户端请求nginx认证用户名(无)
[09/Jul/2019:00:08:03 +0800]  # nginx请求时间

"GET / HTTP/1.1"     #GET请求方式

304      #返回的状态码

0        #字节

 "-"     #无

"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"   #客户端访问设备 Chrome——谷歌浏览器

"-"   # 真实请求IP(防代理访问的IP)

3)根据需求自己定义好日志模板,这个根据业务需求进行修改,对于日志模块简单的入门目前就这些,

更多的变量需求查看:https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status

嵌入式变量
该ngx_http_core_module模块支持名称与Apache Server变量匹配的嵌入式变量。首先,这些是代表客户端请求标头字段的变量,例如$http_user_agent$http_cookie等。另外还有其他变量:

$arg_name
name请求行中的 参数

$args
请求行中的参数

$binary_remote_addr
客户端地址(二进制形式),对于IPv4地址,值的长度始终为4个字节,对于IPv6地址,值的长度始终为16个字节

$body_bytes_sent
发送给客户端的字节数,不计算响应头;此变量与 Apache模块 的“ %B”参数 兼容mod_log_config

$bytes_sent
发送给客户端的字节数(1.3.8、1.2.5)

$connection
连接序列号(1.3.8、1.2.5)

$connection_requests
通过连接发出的当前请求数(1.3.8、1.2.5)

$content_length
“内容长度”请求标头字段

$content_type
“内容类型”请求标头字段

$cookie_name
该name饼干

$document_root
当前请求的根或别名指令的值

$document_uri...一样 $uri
$host
优先顺序如下:请求行中的主机名,或“主机”请求标头字段中的主机名,或与请求匹配的服务器名

$hostname
主机名

$http_name
任意请求头字段;变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线

$https
on如果连接以SSL模式运行,则为 “ ”,否则为空字符串

$is_args
“ ?”(如果请求行包含参数),否则为空字符串

$limit_rate
设置此变量将启用响应率限制;参见limit_rate

$msec
以毫秒为单位的当前时间(以秒为单位)(1.3.9,1.2.6)

$nginx_version
Nginx版本

$pid
工作进程的PID

$pipe
“ p”如果请求被流水线.“ ”否则(1.3.12,1.2.7)

$proxy_protocol_addr
来自PROXY协议标头(1.5.12)的客户端地址
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。

$proxy_protocol_port
PROXY协议标头(1.11.0)中的客户端端口
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。

$proxy_protocol_server_addr
PROXY协议标头中的服务器地址(1.17.6)
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。

$proxy_protocol_server_port
PROXY协议标头中的服务器端口(1.17.6)
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。

$query_string...一样 $args
$realpath_root
绝对路径名,对应于当前请求的 根或别名指令的值,所有符号链接都解析为真实路径
$remote_addr
客户地址

$remote_port
客户端口

$remote_user
基本身份验证随附的用户名

$request
完整的原始请求行

$request_body
请求主体
当将请求正文读取到内存缓冲区时, 该变量的值可在proxy_pass, fastcgi_pass, uwsgi_pass和 scgi_pass指令处理的位置 使用。

$request_body_file
带有请求正文的临时文件的名称
在处理结束时,需要删除文件。要始终将请求正文写入文件, 需要启用client_body_in_file_only。当在代理请求中或在对FastCGI / uwsgi / SCGI服务器的请求中传递临时文件的名称时,应分别通过 proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off或 scgi_pass_request_body off 指令来禁用传递请求正文。 。

$request_completion
“ OK”(如果请求已完成),否则为空字符串

$request_filename
基于root或alias 指令以及请求URI 的当前请求的文件路径

$request_id
从16个随机字节生成的唯一请求标识符,以十六进制(1.11.0)

$request_length
请求长度(包括请求行,标头和请求正文)(1.3.12,1.2.7)

$request_method
请求方法,通常是“ GET”或“ POST”

$request_time
请求以毫秒为单位的处理时间(以秒为单位)(1.3.9、1.2.6);从客户端读取第一个字节以来经过的时间

$request_uri
完整的原始请求URI(带有参数)

$scheme
请求方案,“ http”或“ https”

$sent_http_name
任意响应头字段;变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线

$sent_trailer_name
在响应末尾发送的任意字段(1.13.2);变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线

$server_addr
接受请求的服务器的地址
计算此变量的值通常需要一个系统调用。为避免系统调用,listen伪指令必须指定地址并使用bind参数。

$server_name
接受请求的服务器的名称

$server_port
接受请求的服务器的端口

$server_protocol
请求协议,通常是“ HTTP/1.0”,“ HTTP/1.1”或“ HTTP / 2.0 ”

$status
响应状态(1.3.2、1.2.2)

$tcpinfo_rtt$tcpinfo_rttvar$tcpinfo_snd_cwnd$tcpinfo_rcv_space
有关客户端TCP连接的信息;在支持TCP_INFO套接字选项的 系统上可用

$time_iso8601
ISO 8601标准格式(1.3.12,1.2.7)的本地时间

$time_local
通用日志格式的本地时间(1.3.12,1.2.7)

$uri
请求中的当前URI,已规范化

$uri在请求处理期间,例如在进行内部重定向或使用索引文件时, 的值可能会更改。

可运用场景:ELK日志分析,接下来就进行日志模板的介绍吧。

你可能感兴趣的:(NGINX入门篇)