jjfjjj 发表于 2018-11-12 10:46:01

Nginx日志管理和切割

  Nginx日志管理和切割
  一、日志分类
  Nginx日志主要分为两种,访问日志和错误日志。两种日志可以在http和server模块中配置,nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令来定义
  1、访问日志
  访问日志主要记录客户端访问Nginx的每一个请求
  log_format用来设置日志格式,只能在http模块下设置
  log_format name   name(格式名称)   type(格式样式)
  下面是默认的nginx日志格式:
  log_formatmain'$remote_addr - $remote_user [$time_local]"$request" '
  '$status $body_bytes_sent"$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  字段含义:
  $remote_addr远程客户端的IP地址。
  $remote_user远程客户端用户名称,如果网站设置了用户验证的话就会有,否则空白
  [$time_local]访问的时间与时区比如18/Jul/2012:17:00:01+0800时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
  $request记录请求的url和http协议
  $status记录请求返回的http状态码.
  $body_bytes_sent记录发送给客户端的文件主体内容的大小
  $http_referer记录 记录从哪个页面链接访问过来的。
  $http_user_agent记录客户端浏览器信息
  $http_x_forwarded_for客户端的真实ip。当nginx前面有代理服务器时,$remote_addr获取到的只能是nginx上一级的IP,而反向代理服务器在转发请求的http头信息中可以增加x_forwarded_for信息用以记录原有客户端的IP地址和原来客户端的请求的服务器地址,$http_x_forwarded_for参数就是承接上一级传递的客户端IP参数。从而就获取到了客户端的真实IP。
  access_log 指令用来指定日志文件的存放路径,可以在http、server、location中设置
  举例说明如下
  access_loglogs/access.logmain;
  如果想关闭日志可以如下
  access_log off;
  2、错误日志
  错误日志主要记录客户端访问Nginx出错时的日志格式,不支持自定义。
  由指令error_log来指定具体格式如下
  error_logpath(存放路径)level(日志等级)【debug | info | notice | warn | error |crit】
  如果不指定路径的话默认是在logs下。
  3.生产环境下常用的日志格式:
  log_formatmain'$http_host-$http_x_forwarded_for${request_time}s- [$time_local] "$request"'
  '$status $body_bytes_sent"$http_referer" "$http_user_agent" $remote_addr ' ;
  二、日志管理
  1.nginx日志切割
  实现思路:每天定时把日志移动到备份目录,然后重新reload或者restart。这样会在原来的logs下生成新的日志文件。(提示:当日志文件被移动到备份目录后,在没有restart的之前,nginx依然会向原来的日志文件中记录访问请求,只有等restart的之后生成了新文件,才重新记录到新的日志文件中)
  实现脚本:
#!/bin/bash  
#created by fuzj
  

  
#Log Dir
  
DIR_LOG="/usr/local/nginx/logs"
  
weblog=(
  
www.beyond.com
  
bbs.beyond.com
  
)
  
DATE=`date -d"yesterday" +"%Y%m%d"`
  

  
if [ ! -d"${DIR_LOG}/cut_log/${DATE}" ];then
  
   mkdir -p ${DIR_LOG}/cut_log/${DATE}
  
fi
  
DIR="${DIR_LOG}/cut_log/${DATE}"
  
NGINX_LOG="${DIR_LOG}/current"
  

  
forlog in ${weblog[@]}; do
  
mv ${NGINX_LOG}/$log $DIR
  
done
  

  
kill -USR1 `cat /usr/local/nginx-1.2.1/logs/nginx.pid`
  
sleep 130
  
find ${DIR_LOG}/cut_log/* -typed -mtime +7 -exec rm -rf {} \;
  
sleep 130
  2.nginx不记录某些文件或目录的访问日志
  方法:先用location 定义不记录日志的文件或目录,然后在其下面用 access_log off; 进行关闭日志即可
  例如:
  location ~*.\checkstatus.html {
  access_logoff;
  }


页: [1]
查看完整版本: Nginx日志管理和切割