Nginx基础篇-Nginx的日志模块
日志模块
日志模块名称:
ngx_http_log_module
相关指令
log_format:日志格式
access_log :访问日志
error_log:错误日志
open_log_file_cache:日志缓存
open_log_file_cache max=N [inactive=time] [mim_uses=N] [valid=time] | off
该指令默认是禁止的,等同于:
open_log_file_cache off;
open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用 LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。 LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。
inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。
min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。
valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。
open_log_file_cache 指令的设置示例如下:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
日志的格式和命令
log_format
一、简介:Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
二、语法:Syntax: log_format name [escape=default|json] string …;
name 表示格式名称
string 表示定义的格式
三、默认值:Default: log_format combined “…”;
四、环境:Context: http context
1.网站代理LB
例如代理服务器的日志格式就不同
①、如果Nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
$remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,
用来记录客户端IP地址和客户端请求的服务器地址。
②、nginx代理日志格式如下
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
五、定义设置位置
vim /etc/nginx/nginx.conf
log_format combined '$remote_addr - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
日志格式允许包含的变量
$remote_addr, $http_x_forwarded_for
①.远程地址: 记录客户端IP地址
②.代理IP
$remote_user
远程用户:记录客户端用户名称
[$time_local]
本地时间:服务器自身时间
$request
请求:记录请求的URL和HTTP协议
"GET /1.html HTTP/1.1"
"GET /index.html HTTP/1.1"
$status
状态:记录请求状态:200、404、503、100、301
$body_bytes_sent
发送给客户端的字节数,不包括响应头的大小
$bytes_sent
发送给客户端的总字节数 (可在主配置文件中,增加此项观c)
$msec
日志写入时间。单位为秒,精度是毫秒。
$http_referer
记录从哪个页面链接访问过来的 (超链接)
$http_user_agent
记录客户端浏览器相关信息
$request_length
请求的长度(包括请求行,请求头和请求正文)。
$request_time
请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601
ISO8601标准格式下的本地时间。
访问日志和错误日志
access_log
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
192.远程主机IP
- - 用户
【2017】时间
get获得,下载,还有post提交。
/nginx-logo.png 下载图片
http版本
状态码 什么结果。对,还是错
368 大小
引用自哪个连接,主页http://192.168.100.10/
Mozilla 5.0浏览器的版本
Windows NT 客户端系统类型
-远程客户端主机地址 (请看注释)
error_log
日志缓存
简介:大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。
可以使用open_log_file_cache来设
Syntax:open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
①max:缓存的最大数。(超过之后1000个文件描述符就把不常用的清理掉)。不是所有的日志文件都会缓存,只有使用量比较大的1000个fd才会缓存。
②inactive:无效时间20秒。结合最小次数使用min_user。淘汰策略
③min_user:结合无效时间,比如三分钟,低于3次访问,就清除出缓存。淘汰策略
④valid:有效时间,比如一分钟检查一次是否有更新。检查周期
比如当服务器开启了日志缓存,日志缓存最多缓存1000个文件。如果超了这个数字,就把相对使用比较少的日志清理出缓存。
为了避免使用频率较低的日志进入缓存,所以设置淘汰机制。
在20秒之内,如果这个日志文件被使用的频率,低于3次,那么就有可能被清理出缓存。
每隔一分钟检查一下缓存,看谁的计时器和使用次数不够就吧谁清理出去。
Default:open_log_file_cache off;
Context:http, server, locatition
①http{} 将整个服务器所有网站,所有页面的日志进行缓存
②server{} 将某一个网站的所有页面日志,进行缓存
③location{}某一个页面的日志,进行缓存。