nginx服务器日志相关指令主要有两条
1.一条是log_format,用来设置日志格式.
2. 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。
nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format的详细参数如下:
参数 | 说明 | 示例 |
$remote_addr | 客户端地址 | 211.28.65.253 |
$remote_user | 客户端用户名称 | -- |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request | 请求的URI和HTTP协议 | "GET /article-10000.html HTTP/1.1" |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | www.it300.com 192.168.100.100 |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器等信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$request_time | 整个请求的总时间 | 0.205 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
举例配置文件:
#vim /usr/local/nginx/conf/nginx.conf
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for '
'"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
2. nginx日志格式
日志对于统计排错来说非常有利的,nginx日志相关的配置如 access_log,log_format,open_log_file_cache,log_not_found,log_subrequest,rewrite_log,error_log.
nginx有一个非常灵活的日志记录模式,每个几倍的配置可以有独立的访问日志。日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的
2.1 access_log 指令
语法:
access_log path [format [buffer=size [flush=time]]];
access_Log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;
默认值: access_log logs/access.log combined;
默认值:http,server,location,if in location, limit_except
gzip 压缩等级。
buffer 设置内存缓存区大小。
flush 保存在缓存区中的最长时间。
不记录日志: access_log off;
使用默认combined 格式记录日志 : access_log logs/access.log 或 access_log logs/access.log combined;
2.2 log_format指令
语法: log_format name string ...;
默认值: log_format combined "...";
配置段: http
name 表示格式名称,string 表示等义的格式。log_format 有一个默认的无需配置的combined日志格式,相当于apache的combined日志格式,如下所示
log_format combined '$remote_addr - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的ip地址了,$remote_addr获取反向代理的IP地址。反向代理服务器再转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录,客户端IP地址和客户端请求的服务器地址,如下
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
123.125.71.86 - - [17/Jul/2015:15:24:23 +0800] "GET
/data/cache/forum_slide.js?GKl HTTP/1.1" 200 4082
"http://www.iyunv.com/forum.php?fid=54&digest=1" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -
日志格式允许包含的变量注释如下:
$remote_addr,$http_x_forwarded_for #记录客户端IP地址
$remote_user #记录客户端用户名称
$request #记录请求的URL和HTTP协议
$status #记录请求状态
$body_bytes_sent #发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块mod_log_config李的“%B”参数兼容
$bytes_sent #发送给客户端的总字节数
$connection #连接到序列号
$connection_requests #当前通过一个链接获得的请求数量
$msec #日志写入时间,单位为秒精度是毫秒。
$pipe #如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为".".
$http_referer #记录从那个页面链接访问过来的
$http_user_agent #记录客户端浏览器相关信息
$request_length #请求的长度(包括请求行,请求头和请求正文)。
$request_time #请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,知道把最后一个字符发送给客户端后进行日志写入位置。
$time_iso8601 ISO8601标准格式下的本地时间
$time_local #通用日志格式下的本地时间
发送给客户端的响应头拥有"sent_http_". 比如$sent_http_content_range.
实例如下:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'"$status" $body_bytes_sent
"$http_referer" '
'"$http_user_agent"
"$http_x_forwarded_for" '
'"$gzip_ratio" $request_time $bytes_sent
$request_length';
log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" '
'"$status" $body_bytes_sent $request_time
$bytes_sent $request_length '
'[$upstream_response_time]
[$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]';
open_log_file_cache max=1000 inactive=60s;
server {
server_name ~^(www\.)?(.+)$;
access_log logs/$2-access.log main;
error_log logs/$2-error.log;
location /srcache {
access_log logs/access-srcache.log srcache_log;
}
}
}
2.3 open_log_file_cache指令
语法:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
默认值: open_log_file_cache off;
配置段: http,server,location
对 于 每 一 条 日 志 记 录 , 都 将 是 先 打 开 文 件 , 再 写 入 日 志 , 然 后 关 闭 。 可 以 使 用 open_log_file_cache 来设置日志文件缓存(默认是 off),格式如下:
参数注释如下:
max: 设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive: 设置存活时间,默认是10s
min_uses: 设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符计入缓存重,默认是1次
valid:设置检查频率,默认是60s
off: 禁用缓存
实例如下:
open_log_file_cache_max=1000 inactive=20s valid=1m min_user=2;
2.4 log_not_found指令
语法: log_not_found on | off;
默认值: log_not_found on;
配置段: http, server, location 是否在 error_log 中记录不存在的错误。默认是。
2.5 log_subrequest指令
语法: log_subrequest on | off;
默认值: log_subrequest off;
配置段: http, server, location 是否在 access_log 中记录子请求的访问日志。默认不记录。
2.6 rewrite_log 指令
由 ngx_http_rewrite_module 模块提供的。用来记录重写日志的。对于调试重写规则建议 开启。 Nginx 重写规则指南
语法: rewrite_log on | off;
默认值: rewrite_log off;
配置段: http, server, location, if 启用时将在 error log 中记录 notice 级别的重写日志。
2.7 error_log 指令
语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];
默认值: error_log logs/error.log error;
配置段: main, http, server, location 配置错误日志。