nginx的access(nginx没有access日志)

nginx的access(nginx没有access日志)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-08-13
文章简介

注:在server中设置x_forwarded_forproxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;access_log用了

2025阿里云双十一服务器活动

:在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

  • nginx的access,nginx没有access日志

    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日志怎么设置的详细内容,更多请关注主机测评网其它相关文章!

    标签:
    可以满足不同公司的需求(满足不同员工的需求)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!