nginx访问日志并删除指定天数前的日志记录配置方法
说明:
操作系统:centos
站点1:bbs.jb51.net
站点2:sns.jb51.net
nginx安装路径:/usr/local/nginx
nginx配置文件路径:/usr/local/nginx/conf/nginx.conf
站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.jb51.net.conf
站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.jb51.net.conf
目的:
1、对站点1和站点2的nginx访问日志按天保存,日志路径为:
站点1:/usr/local/nginx/logs/nginx_logs/bbs_logs
站点2:/usr/local/nginx/logs/nginx_logs/sns_logs
2、只保留30天以内的日志记录
具体操作:
1、创建日志存放路径
mkdir -p /usr/local/nginx/logs/nginx_logs/bbs_logs
mkdir -p /usr/local/nginx/logs/nginx_logs/sns_logs
2、设置nginx日志记录格式
编辑vi /usr/local/nginx/conf/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
取消日志记录格式前面的注释,在最后添加一行,如下所示:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time'; #新添加的一行
:wq! #保存退出
3、设置虚拟主机配置文件
编辑vi /usr/local/nginx/conf/vhost/bbs.jb51.net.conf #,在bbs.jb51.net;这一行下面添加
access_log logs/bbs_access.log main; #注意这里的main要和上一步中的main一致
:wq! #保存退出
编辑vi /usr/local/nginx/conf/vhost/sns.jb51.net.conf ,在sns.jb51.net;这一行下面添加
access_log logs/sns_access.log main; #注意这里的main要和上一步中的main一致
:wq! #保存退出
service nginx reload #重新加载nginx配置文件
4、创建nginx日志切割脚本
编辑vi /home/crontab/cut_nginx_log.sh
#!/bin/sh
logs_path="/usr/local/nginx/logs/"
days=30
mv ${logs_path}bbs_access.log ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%y%m%d").log
mv ${logs_path}sns_access.log ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%y%m%d").log
kill -usr1 `cat /usr/local/nginx/logs/nginx.pid`
find ${logs_path}nginx_logs/bbs_logs/ -name "bbs_access_*" -type f -mtime +$days -exec rm {} \;
find ${logs_path}nginx_logs/sns_logs/ -name "sns_access_*" -type f -mtime +$days -exec rm {} \;
:wq! #保存退出
chmod +x /home/crontab/cut_nginx_log.sh #添加脚本执行权限
5、添加任务计划,修改/etc/crontab
vi /etc/crontab在最后一行添加
0 0 * * * root /home/crontab/cut_nginx_log.sh #表示每天凌晨执行
:wq! #保存退出
6、重新启动crond使设置生效
/etc/rc.d/init.d/crond restart #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装
chkconfig crond on #设为开机启动
service crond start #启动
每天会在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs
目录下生成类似bbs_access_20140126.log和bbs_access_20140126.log的日志文件
并且只保留最近30天的日志记录
至此,linux下定时切割nginx访问日志并删除指定天数前的日志记录完成。
备注:如果脚本在执行过程中出现下面错误
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
解决办法:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#使用nginx -c的参数指定nginx.conf文件的位置
扩展阅读:nginx访问日志参数说明
192.168.21.1 - - [27/jan/2014:11:28:53 +0800] "get /2.php http/1.1" 200 133 "-" "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/33.0.1707.0 safari/537.36" "-"192.168.21.128 200 127.0.0.1:9000 0.119 0.119
$remote_addr:客户端地址 192.168.21.1
$remote_user:客户端用户 -
$time_local:时间和时区 27/jan/2014:11:28:53 +0800
$request:请求的url路径和http协议 get /2.php http/1.1
$status: http状态 200
$body_bytes_sent:发送给客户端页面大小 133
$http_referer:页面跳转来源 -
$http_user_agent:用户访问终端 mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/33.0.1707.0 safari/537.36
$http_x_forwarded_for:http 代理中,请求端真实ip -
$http_host:用户在浏览器中输入的url(ip或着域名)地址 192.168.21.128
$upstream_status: upstream状态 200
$upstream_addr: 后端upstream地址及端口 127.0.0.1:9000
$request_time: 页面访问总时间 0.119
$upstream_response_time:页面访问中upstream响应时间 0.119
上一篇: php遍历数组的4种方法总结