nginx访问日志配置及访问日志切割实战

本文详细介绍了如何在CentOS 7.9环境下配置Nginx的访问日志,包括日志格式定义、日志文件路径设置、默认日志变量的含义。此外,还讲解了如何通过脚本实现日志按天切割,并通过cron任务自动化执行,以保持日志管理的有效性和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

环境:centos 7.9 nginx version: nginx/1.18.0
nginx会将每个用户访问网站的日志信息保存在/usr/local/nginx/logs/access.log中,这些访问日志信息都是为了供网站提供者分析用户的浏览行为,此日志功能是由ngx_http_log_module模块提供的。

nginx访问日志语法配置说明( access.log)

记录日志信息的格式是什么以及日志文件存放位置,这些操作由nginx.conf配置文件来配置的,如图,nginx的访问日志语法配置设置在http标签内,如下图:
在这里插入图片描述

nginx日志格式定义语法

nginx日志格式定义语法如下:

log_format     格式标签名     string....;			#其中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请求起始行信息
$statushttp状态码,记录请求返回的状态,如:200,404,301等
$body_bytes_sent服务器发给客户端的响应body字节数
$http_referer记录此次请求是从哪个链接访问过来的,可根据referer进行防盗链设置
$http_user_agent记录客户端访问信息,例如:浏览器、手机客户端等
$http_x_forwarded_for当前端有代理服务器时,设置web节点记录客户端地址的配置

在没有特殊情况下,保持nginx访问日志的默认格式就行了,更多变量可以查阅官方网站https://nginx.org/en/docs/http/nginx_log_module.html

记录日志的access_log参数说明

语法如下:

access_log path format gzip[=level] [buffer=size] [flush=time] ;

gzip[=level]表示压缩级别,buffer=size表示存放访问日志的缓冲区大小,flush=time为将缓冲区刷到磁盘的时间,一般情况下都无须修改这些参数的默认值。

访问日志配置实战

在http标签定义日志格式,然后在虚拟主机里使用该格式来记录访问日志,具体实现如下:
在这里插入图片描述
在虚拟主机中引用访问日志格式:
第1个虚拟主机引用访问日志格式:
在这里插入图片描述
第2个虚拟主机引用访问日志格式:
在这里插入图片描述
第3个虚拟主机引用访问日志格式:
在这里插入图片描述
在网页方别测试3个虚拟主机:http://192.168.43.120:81/、http://192.168.43.120:82/、http://192.168.43.120:83/,查看访问日志:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试发现,访问日志均能按照给定的格式记录日志,访问日志配置正常。

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 || exit 1
[ -f ${fujiseiko_first} ] || exit 1
/bin/mv ${fujiseiko_first} ${Dateformat}_${fujiseiko_first}
[ -f ${fujiseiko_second} ] || exit 1
/bin/mv ${fujiseiko_second} ${Dateformat}_${fujiseiko_second}
[ -f ${fujiseiko_third} ] || exit 1
/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值