1.日志文件格式配置
(1)使用log_format指令进行配置文件格式
nginx的log_format可以自主选择参数用于指示服务器的活动状态,默认的是:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ';
假设将nginx服务器作为web服务器,位于负载均衡设备,nginx反向代理之后,不能获取到客户端的真实ip地址了。
原因是进过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip。通过$remote_addr变量拿到的将是反向代理服务器的ip地址,但是,反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端ip地址和原来客户端请求的服务器地址。
(2)access_log指令
语法:access_log path [format [buffer=size [flush=time]]];
access_log path format gzip[=level] [buffer=size] [flush=time];
access_log off;
默认值:access_log logs/access.log combined;
配置段:
gzip压缩等级
buffer设置内存缓存区大小
flush保存在缓存去中的最长时间
不记录日志:access_log off;
使用默认combined格式记录日志:access_log logs/access.log 或access_log logs/access.log combined;
注意:nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则报错。
此外,对于每一条日志记录,都将是先打来文件,再写入日志,然后关闭,可以使用open_log_file_cache来设置日志文件缓存(默认是off)。
2.日志的切割
系统自动切割,利用linux操作系统的定时任务,执行sh脚本,来完成日志的自动切割。
(1)编写脚本
#!/bin/bash
LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #向nginx主进程发送USR1信号,USR1信号是重新打开日志文件
(2)设置定时任务
# vi /etc/crontab
填写下面的命令:
0 0 * * * root /usr/local/nginx/logs/脚本名称
表示配置一个定时任务,定时每天00:00以root身份执行脚本/usr/local/nginx/logs/脚本名称,实现定时自动分割nginx日志。