注:在server中设置x_forwarded_for
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
access_log
用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
access_logpath(存放路径)format(自定义日志名称)示例:
access_loglogs/access.logmain;
2、设置刷盘策略:
access_log/data/logs/nginx-access.logbuffer=32kflush=5s;
buffer满32k才刷盘;假如buffer不满5s钟强制刷盘。
注:一般log_format在全局设置,可以设置多个。access_log可以在全局设置,但往往是定义在虚拟主机(server)中的location中。例如:
log_formatmain'$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_formatsrcache_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_cachemax=1000inactive=60s;
server_name~^(www\.)?(.+)$;
access_loglogs/$2-access.logmain;
error_loglogs/$2-error.log;
access_loglogs/access-srcache.logsrcache_log;
对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。你可以使用open_log_file_cache来开启日志文件缓存(默认情况下是关闭的)。语法:
open_log_file_cachemax=N[inactive=time][min_uses=N][valid=time];
参数注释如下:
max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s

3)日志分析:
通过对日志格式的定义,就可以使用常见的Linux命令行工具进行分析了:
查找访问频率最高的URL和次数:
cataccess.log|awk-F‘^A’‘{print$10}’|sort|uniq-c
查找当前日志文件500错误的访问:
cataccess.log|awk-F‘^A’‘{if($5==500)print$0}’
查找当前日志文件500错误的数量:cataccess.log|awk-F‘^A’‘{if(0}’|wc-l
查找某一分钟内500错误访问的数量:
cataccess.log|awk-F‘^A’‘{if($5==500)print$0}’|grep’09:00’|wc-l
查找耗时超过1s的慢请求:
tail-faccess.log|awk-F‘^A’‘{if($6>1)print$0}’
假如只想查看某些位:
tail-faccess.log|awk-F‘^A’‘{if($6>1)print$3″|”$4}’
查找502错误最多的URL:
cataccess.log|awk-F‘^A’‘{if($5==502)print$11}’|sort|uniq-c
查找200空白页
cataccess.log|awk-F‘^A’‘{if($5==200&&$8print$3″|”$4″|”$11″|”$6}’
切割日志
Nginx的日志都是写在一个文件当中的,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理和造成Nginx日志写入效率低下等问题。因此,通常需要对access_log和error_log日志进行分割。切割日志一般利用USR1信号让nginx产生新的日志。实例:
#!/bin/bashlogdir="/data/logs/nginx"pid=`cat$logdir/nginx.pid`
DATE=`date-d"1hoursago"+%Y%m%d%H`
DATE_OLD=`date-d"7daysago"+%Y%m%d`foriin`ls$logdir/*access.log`;domv$i$i.$DATEdoneforiin`ls$logdir/*error.log`;domv$i$i.$DATEdonekill-sUSR1$pidrm-v$logdir"/access.log."$DATE_OLD*rm-v$logdir"/error.log."$DATE_OLD*
1、分析:
将上面的脚本放到crontab中,每小时执行一次(0),这样每小时会把当前日志重命名成一个新文件;然后发送USR1这个信号让Nginx重新生成一个新的日志。(相当于备份日志)
在没有执行kill-USR1$pid之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件”*access.log.2016032623”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。
使用系统自带的logrotates,也可以实现nginx的日志分割,查看其bash源码,发现也是发送USR1这个信号。
以上就是nginx的access_log日志怎么设置的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--nginx的access(nginx没有access日志)
本文地址:https://www.idcbaba.com/guowai/6017.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




