一.给虚拟主机指定日志文件
1.指定日志文件
Nginx允许不同的server使用不同的日志文件,修改Nginx配置文件如下:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
server {
listen 80;
server_name a.com;
access_log logs/a.com.access.log main;
location / {
root /application;
index index.html;
}
}
server {
listen 1234;
server_name b.com;
location / {
root test;
index index.html;
}
}
}
2.重新加载配置文件
[root@data1 nginx]# ./sbin/nginx -s reload
查看当前日志文件
[root@data1 logs]# pwd
/usr/local/nginx/logs
[root@data1 logs]# ll
总用量 16
-rw-r--r--. 1 root root 0 7月 27 12:56 access.log
-rw-r--r--. 1 root root 0 7月 27 12:56 a.com.access.log
-rw-r--r--. 1 nobody root 11713 7月 27 12:56 error.log
-rw-r--r--. 1 root root 5 7月 24 20:50 nginx.pid
[root@data1 logs]# cat access.log
[root@data1 logs]# cat a.com.access.log
[root@data1 logs]#
当前access.log和a.com.access.log文件都是空的
3.访问测试
3.1 访问a.com
查看日志
[root@data1 logs]# cat access.log
[root@data1 logs]# cat a.com.access.log
192.168.190.1 - - [27/Jul/2018:12:58:38 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
[root@data1 logs]#
只有a.com.access.log中有写入访问日志
3.2 访问b.com:1234
查看日志
[root@data1 logs]# cat access.log
192.168.190.1 - - [27/Jul/2018:13:03:24 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
[root@data1 logs]# cat a.com.access.log
192.168.190.1 - - [27/Jul/2018:12:58:38 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
[root@data1 logs]#
可以看出访问a.com的时候访问记录是保存在a.com.access.log中,
访问b.com:1234的时候访问记录是保存在默认的日志文件access.log中
二.定时任务备份日志
1.创建一个shell脚本,用于备份日志文件
[root@data1 nginx]# cat bak_log.sh
#!/bin/bash
base_path='/usr/local/nginx/logs' # 日志根目录
log_path=$(date -d yesterday +"%Y%m") # 备份日志目标目录,使用年月生成,即一个月的日志备份在同一个目录
second=$(date -d yesterday +"%H:%M:%S") # 这里用当前时间的时分秒来作为文件名
mkdir -p $base_path/$log_path # 创建目标目录
mv $base_path/access.log $base_path/$log_path/access_$second.log # 备份日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` # 重读日志
这里为了方便演示,以时分秒为文件后缀
2.创建crontab创建定时任务
使用crontab -e编辑定时任务,添加(同vi操作)以下内容:
*/1 * * * * sh /usr/local/nginx/bak_log.sh
查看定时任务crontab -l
[root@data1 nginx]# crontab -l
*/1 * * * * sh /usr/local/nginx/bak_log.sh # 一分钟执行一次"sh /usr/local/nginx/bak_log.sh"这个命令
关于crontab定时任务详见 http://man.linuxde.net/crontab
3.查看日志文件
[root@data1 logs]# pwd
/usr/local/nginx/logs
[root@data1 logs]# ll
总用量 24
drwxr-xr-x. 2 root root 4096 7月 28 17:41 201807
-rw-r--r--. 1 nobody root 0 7月 28 17:41 access.log
-rw-r--r--. 1 nobody root 392 7月 27 13:04 a.com.access.log
-rw-r--r--. 1 nobody root 11774 7月 27 13:02 error.log
-rw-r--r--. 1 root root 5 7月 24 20:50 nginx.pid
如图,在nginx的logs目录下已经生成了201807这个目录,查看201807
[root@data1 logs]# ll 201807/
总用量 4
-rw-r--r--. 1 nobody root 422 7月 28 17:45 access_17:46:01.log
可以看出日志 已经备份到201807这个目录下了