Nginx的日志文件配置

一、介绍日志文件格式
日志文件的记录是有格式的,我们可以按系统默认的格式去记录,也可以按我们自定义的格式去记录。可以用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:日志格式
$remote_addr:客户端ip地址
$remote_user:客户端用户名
$request:请求的url
$status:请求状态(比如:正在请求中,请求完成等状态)
$body_bytes_sent:发送给客户端的字节数(服务端返回给客户端数据的大小)
$http_referer:原网页的url(从哪个url打开的所访问的页面)
$http_user_agent:客户端的浏览器记录的信息(比如是google浏览器,那么就记录google浏览器的类型等基本信息)
$http_x_forwarded_for:客户端ip地址(类似于$remote_addr)

通常情况下用以上配置即可,可以将main换成combined(默认的日志格式),其他不变即可。

三、Nginx日志文件存储路径配置
1、说明
日志文件在记录的时候,需要存储到磁盘上,存储的路径是可配置的,通过access_log指令来配置Nginx的日志文件的存储路径。
2、修改配置
access_log logs/access.log main;
logs/access.log:这个为日志文件的存放路径,从安装目录开始,意思绝对路径为:/usr/local/nginx/logs/access.log
main:为日志格式,通常为combined
若不想记录Nginx的日志,则将access_log路径配成off即可,如下:
access_log off;

四、Nginx日志文件的切割
1、说明:
为了使Nginx的日志文件存储更合理、有序,我们需要将日志文件进行分开存储,比如我们可以按时间来分开,今天的日志文件存储到一个文件中,明天的日志文件则存储到另一个新的文件中等等。这时候就需要用到了Nginx的日志文件的切割。

有两种方式:
1、手动进行切割
步骤:分两步骤。
(1)进入logs目录。执行命令
mv access.log xxx(随便起个名).log
意思是说将以前的日志文件重命名为一个新的名字的日志文件。
(2)执行命令
kill -USR1 主进程号(需要先用ps -ef|grep nginx命令找到master的进程号)
kill -USR1 主进程号 这个命令在信号控制那章节有提到。进行日志切割的命令。

操作完(1)(2)两步骤后,在logs目录下ls一下,会发现又自动多出了一个日志文件(这个日志文件的命名来源于nginx.conf文件里的access_log的路径),并且里面无内容。这个文件就是切割出来的新文件,再有日志会往这里面写,而不会操作老日志文件。

2、自动进行切割
步骤:
(1)首先创建个sh文件(称为批处理日志文件),进入nginx的logs目录运行命令
touch cutlog.sh(文件名自定义,后缀.sh即可)

(2)编辑cutlog.sh文件。输入如下内容:
vi cutlog.sh

D=$(date +%Y%m%d)
LOGS_PATH=/usr/local/nginx/logs
mv /usr/local/nginx/logs/access.log /${LOGS_PATH}/${D}.log
kill -USR1 $(cat /usr/local/nginx/nginx.pid)

说明:

D=$(date +%Y%m%d),声明个变量,名为D(自定义),值为date(Linux自带的,类似于函数,用于获取当前时间,并且格式为年月日)
${D}:引用上面变量名为D的变量
$(cat /usr/local/nginx/nginx.pid):cat命令意思是查看。nginx.pid:存储的是nginx的主进程号。连起来的意思就是查看nginx主进程号,带上$(xx)就是说拿到xx

(3)定时执行某个文件,输入如下命令:(注意:运行crontab命令需要先用yum进行安装crontab,否则会出现command not found)
crontab -e
crontab:定时执行某个文件
crontab -e:编辑定时执行的内容

(4)执行完(3)后会出现编辑器,输入如下内容:
23 59 *** /bin/bash /usr/local/nginx/logs/cutlog.sh
含义:在每天23点59分定时执行cutlog.sh文件,这样就实现了每天定时切割日志文件了。
原理:只是将手动切割写成个脚本。

如有需要每隔1个月就备份日志到其他地方并删除原位置的日志等类似需求都可以写个shell脚本,然后用linux的crontab来定时执行。