nginx访问⽇志配置及访问⽇志切割实战
前⾔
环境:centos 7.9 nginx version: nginx/1.18.0
nginx会将每个⽤户访问⽹站的⽇志信息保存在/usr/local/nginx/logs/access.log中,这些访问⽇志信息都是为了供⽹站提供者分析⽤户的浏览⾏为,此⽇志功能是由ngx_http_log_module模块提供的。
nginx访问⽇志语法配置说明( access.log)
记录⽇志信息的格式是什么以及⽇志⽂件存放位置,这些操作由f配置⽂件来配置的,如图,nginx的访问⽇志语法配置设置在http标签内,如下图:
nginx⽇志格式定义语法
nginx⽇志格式定义语法如下:
log_format    格式标签名    ;#其中log_format是关键字,标签名
nginx的默认⽇志格式如上图所⽰那样,为:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status$body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#其中main就是⽇志格式的标签名
nginx定义访问⽇志⽂件语法
定义好了⽇志的格式(可以有多种格式),那么就来定义⽇志⽂件名、存放的位置以及使⽤哪种格式记录⽇志,语法如下:
access_log /xxx/xxxx/filename  格式标签名;
nginx记录⽇志的默认参数如下:
access_log  logs/access.log  main;
nginx⽇志格式变量说明
默认的⽇志格式如下,有很多内置的变量,下⾯来讲⼀下这些变量的含义:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status$body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
nginx⽇志变量说明
$remote_addr远程客户端地址
$remote_user远程客户端⽤户名
$time_local记录访问的时间
$request⽤户的http请求起始⾏信息
$status http状态码,记录请求返回的状态,如:200,404,301等
nginx⽇志变量说明
$body_bytes_sent服务器发给客户端的响应body字节数
$http_referer记录此次请求是从哪个链接访问过来的,可根据referer进⾏防盗链设置$http_user_agent记录客户端访问信息,例如:浏览器、⼿机客户端等
$http_x_forwarded_for当前端有代理服务器时,设置web节点记录客户端地址的配置
记录⽇志的access_log参数说明
语法如下:
access_log path format gzip[=level][buffer=size][flush=time];
gzip[=level]表⽰压缩级别,buffer=size表⽰存放访问⽇志的缓冲区⼤⼩,flush=time为将缓冲区刷到磁盘的时间,⼀般情况下都⽆须修改这些参数的默认值。
访问⽇志配置实战
nginx访问⽇志轮询切割
实际⽣产中,随着业务访问的⽇增⽉累,访问⽇志的⼤⼩会越来越⼤,这不利于⽇志的分析和处理,所以有必要对⽇志进⾏按天或按⼩时进⾏切割,使其分成不同的⽂件保存,下⾯将对访问⽇志进⾏按天分割,脚本如下:
vim /usr/local/nginx/server_script/cut_access_log.sh
#!/bin/bash
Dateformat=`date +%Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="${Basedir}/logs"
fujiseiko_first="fujiseiko_first.access.log"
fujiseiko_second="fujiseiko_second.access.log"
fujiseiko_third="fujiseiko_third.access.log"
[ -d ${Nginxlogdir}]&&cd$Nginxlogdir||exit1
[ -f ${fujiseiko_first}]||exit1
nginx部署前端项目/bin/mv ${fujiseiko_first}${Dateformat}_${fujiseiko_first}
[ -f ${fujiseiko_second}]||exit1
/bin/mv ${fujiseiko_second}${Dateformat}_${fujiseiko_second}
[ -f ${fujiseiko_third}]||exit1
/bin/mv ${fujiseiko_third}${Dateformat}_${fujiseiko_third}
/usr/bin/nginx -s reload
注意:脚本实现了切割nginx⽇志的想法,其主要实现步骤为:将正在写⼊的Nginx⽇志改名为带⽇期格式的⽂件,然后平滑重启重新加载nginx,因为改了访问⽇志⽂件名,所以nginx重启时检查配置⽂件后发现实际⽬录并没有定义格式中的访问⽇志⽂件名,所以nginx⼜会重新⽣成虚拟主机⾥配置的访问⽇志⽂件。
最后通过定时任务每天晚上00:00定时执⾏脚本,即可实现按天切割nginx⽇志⽂件。
crontab -e
00 00 * * * /bin/bash /usr/local/nginx/server_script/cut_access_log.sh >/dev/null 2>&1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。