盛夏的果实 发表于 2021-8-23 10:57:35

nginx访问日志并删除指定天数前的日志记录配置方法

说明:
操作系统:CentOS
站点1:www.zzvips.com
站点2:hao.zzvips.com
Nginx安装路径:/usr/local/nginx
Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf
站点1配置文件路径:/usr/local/nginx/conf/vhost/www.zzvips.com.conf
站点2配置文件路径:/usr/local/nginx/conf/vhost/hao.zzvips.com.conf
目的:
1、对站点1和站点2的nginx访问日志按天保存,日志路径为:
站点1:/usr/local/nginx/logs/nginx_logs/www_logs
站点2:/usr/local/nginx/logs/nginx_logs/hao_logs
2、只保留30天以内的日志记录
具体操作:
1、创建日志存放路径
复制代码代码如下:


mkdir -p/usr/local/nginx/logs/nginx_logs/www_logs

mkdir -p/usr/local/nginx/logs/nginx_logs/hao_logs2、设置Nginx日志记录格式
编辑vi /usr/local/nginx/conf/nginx.conf
复制代码代码如下:


log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';取消日志记录格式前面的注释,在最后添加一行,如下所示:
复制代码代码如下:


log_formatmain'$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/www.zzvips.com.conf#,在www.zzvips.com;这一行下面添加
复制代码代码如下:


access_loglogs/www_access.logmain;#注意这里的main要和上一步中的main一致
:wq!#保存退出
编辑vi /usr/local/nginx/conf/vhost/hao.zzvips.com.conf ,在hao.zzvips.com;这一行下面添加
复制代码代码如下:


access_loglogs/hao_access.logmain;#注意这里的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}www_access.log${logs_path}nginx_logs/www_logs/www_access_$(date -d "yesterday" +"%Y%m%d").log

mv ${logs_path}hao_access.log${logs_path}nginx_logs/hao_logs/hao_access_$(date -d "yesterday" +"%Y%m%d").log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

find ${logs_path}nginx_logs/www_logs/-name "www_access_*" -type f -mtime +$DAYS -exec rm {} \;

find ${logs_path}nginx_logs/hao_logs/-name "hao_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/www_logs和/usr/local/nginx/logs/nginx_logs/hao_logs
目录下生成类似www_access_20140126.log和www_access_20140126.log的日志文件
并且只保留最近30天的日志记录
至此,Linux下定时切割Nginx访问日志并删除指定天数前的日志记录完成。
备注:如果脚本在执行过程中出现下面错误
复制代码代码如下:


nginx: 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 - - "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

文档来源:http://www.zzvips.com/article/19729.html
页: [1]
查看完整版本: nginx访问日志并删除指定天数前的日志记录配置方法