1、Nginx访问日志(access.log)介绍
NGINX软件会把每个用户访问网站的日志记录到指定的日志文件里,供网站者分析用户的浏览行为,此功能由http_log_module模块负责。
2、访问日志参数
Nginx的访问日志主要有两个参数控制
参数 | 说明 |
log_format | 用来记录日志的格式(可以定义多种日志格式,取不同名字即可) |
access_log | 用来指定日志文件的路径及使用何种日志格式记录日志 |
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记录日志默认参数配置如下,
access_log logs/access.log main;
3、访问日志配置说明
日志的格式定义说明
语法
定义变量 log_format string ...;
配置再http标签内,日志格式说明,注意所有日志段都已空格分开。
Nginx日志变量说明
Nginx变量 | 说明 |
$remote_addr | 记录访问网站的客户端地址 |
$http_x_forwarded_for | 当前有地理服务器时,设置web节点记录客户端节点的配置,此参数生效的前提是代理服务器也进行了相关的设置 |
$remote_user | 远程客户端用户名称 |
$time_local | 记录访问时间与时区 |
$request | 用户的http请求起始行信息 |
$status | http状态码,记录请求返回的状态码,例如200、404、301等 |
$body_bytes_sent | 服务器发送客户端的响应body字节数 |
$http_referer | 记录此请求是从哪个链接访问过来的,可以根据referer进行防盗链设置 |
$http_user_agent | 记录客户端访问信息,例如:浏览器、手机客户端。 |
4、访问配置验证
以下页面访问后,打印出的日志
192.168.19.1 - - [17/Jul/2020:23:32:35 +0800] "POST /zabbix/jsrpc.php?output=json-rpc HTTP/1.1" 200 75 "http://192.168.19.154/zabbix/zabbix.php?action=dashboard.view&ddreset=1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
192.168.19.1 - - [22/Aug/2020:11:30:14 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
对应说明自行分析,应该不难。
5、Nginx访问日志分割
默认情况下,nginx会把所有的访问日志生产到一个指定的access.log文件里面去,时间长了会越积越多,因此有必要对日志进行分割。
按天数分割,具体脚本如下,
[root@www conf]# cat cut_nginx_log.sh
#!/bin/sh
Dateformat=`date +%Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access"
[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
[ -f ${Logname}.log ] || exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload
[root@www conf]# sh -x cut_nginx_log.sh 验证脚本,注意生产验证时间
[root@www logs]# ll 查看
total 8
-rw-r--r-- 1 root root 0 Aug 22 12:28 20200822_access.log
每天凌晨00点30分执行脚本
[root@www logs]# crontab -l
# cut nginx access log by sunny
30 00 * * * /bin/sh /usr/local/nginx/conf/cut_nginx_log.sh >/dev/null 2>&1
知识改变命运,努力创造奇迹~