Nginx日志主要分为两种:访问日志和错误日志。日志开关在Nginx配置文件中设置(一般配置在server部分)。两种类型的日志都可以有选择地关闭,默认情况下都打开。访问日志access_log#日志格式设置log_formataccess'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent"$http_x_forwarded_for';#这个虚拟主机的定义访问日志access_logar/loginx/ha97access.logaccess;log_formataccess中的access表示后面定义的日志条数,被赋予一个名字main,方便access_log命令中的日志格式和输出结果的引用和比较。日志格式用一对单引号括起来。多个日志格式段可以放在不同的行,最后用分号(;)结束单引号中的双引号(")、空格、括号([)等。字符原样输出。更长字符串通常用双引号(")包裹起来,不容易看得更清楚。以$开头的变量将被替换为实际值。日志格式$server_name#虚拟主机名。$remote_addr#远程客户端的IP地址。-#空白,换成“-”占位符,历史原因依然存在。$remote_user#远程客户端用户名,用于记录查看者在认证时提供的名称,如登录百度的用户名scq2099yt,未登录则为空。[$time_local]#访问时间和时区,如18/Jul/2016:17:00:01+0800,时间信息的最后一个“+0800”表示服务器的时区为UTC后8小时.$request#请求URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到什么样的请求,请求是什么$status#记录请求返回的http状态码,比如成功200。$uptream_status#上游状态,比如成功就是200。$body_bytes_sent#发送给客户端的文件body内容的大小,比如899,可以在每条日志记录中把这个值加起来,大致估算出服务器的吞吐量。$http_referer#记录从哪个页面链接访问的。$http_user_agent#客户端浏览器信息$http_x_forwarded_for#客户端真实ip,通常web服务器放在反向代理后面,这样获取不到客户的IP地址,通过$remote_add获取的IP地址是反向代理IP服务器的地址。反向代理服务器可以在转发请求的http头信息中添加x_forwarded_for信息,记录原客户端的IP地址和原客户端请求的服务器地址。$ssl_protocol#SSL协议版本,比如TLSv1。$ssl_cipher#交换数据的算法,如RC4-SHA。$upstream_addr#upstream的地址,即实际提供服务的主机地址。$request_time#整个请求的总时间。$upstream_response_time#请求过程中upstream的响应时间。访问日志中的典型条目如下:192.168.1.102-scq2099yt[18/Mar/2013:23:30:42+0800]"GET/stats/awstats.pl?config=scq2099ytHTTP/1.1"200899"http://192.168.1.1/pv/""Mozilla/4.0(compatible;MSIE6.0;WindowsXXX;Maxthon)"需要注意的是log_format配置必须放在http中,否则会出现如下警告信息:nginx:[warn]"log_format"指令只能在/etc/nginx/nginx.conf:97中的"http"层使用GET请求的参数,POST请求的参数不起作用。http://wiki.nginx.org/NginxHt...$request_body这个变量(0.7.58+)包含请求的主体。此变量的意义出现在指令proxy_pass或fastcgi_pass的位置。如上文件所示,只需要使用$request_body打印post数据,在已有的server段添加如下设置:log_formataccess'$remote_addr-$remote_user[$time_local]"$request"$status$body_bytes_sent$request_body"$http_referer""$http_user_agent"$http_x_forwarded_for';access_log日志/test.access.log访问;错误日志error_log错误日志主要记录客户端访问Nginx错误时的日志,格式不支持自定义。通过错误日志,可以得到系统中某个服务或服务器的性能瓶颈。因此,善用日志,可以获得很多有价值的信息。错误日志由命令error_log指定,具体格式如下:资讯|公告|警告|错误|crit]从左到右,日志详细级别逐级递减,即debug最详细,crit最少。示例如下:error_loglogs/error.loginfo;需要注意的是:error_logoff并不是关闭错误日志,而是将错误日志记录到一个名为off的文件中。关闭错误记录功能的正确方法如下:error_log/dev/null;以上表示日志存放路径设置为“垃圾桶”。location=/favicon.ico{log_not_foundoff;#经常遇到favicon.ico找不到的日志,直接关闭。}日志拆分新版本的Nginx支持自动日志拆分和压缩。日志文件名如下:access.logaccess.log.1access.log.2.gzaccess.log.3.gzerror.logerror.log.1error.log.2.gzerror。默认情况下,log.3.gz会每天生成一个.gz文件。如果还是不能满足你的需求,也可以使用shell脚本+crond来处理日志#!/bin/bash#Nginx的日志pathlogs_path="/data0/logs"logs_dir=${logs_path}/$(date-d"昨天"+"%Y")/$(date-d"昨天"+"%m")logs_file=$(date-d"昨天"+"%Y%m%d")mkdir-p/data0/backuplogs/$(date-d"yesterday"+"%Y")/$(date-d"yesterday"+"%m")tar-czf${logs_path}/${logs_file}.tar.gz${logs_path}/*.logrm-rf${logs_path}/*.logmv${logs_path}/${logs_file}.tar.gz/data0/backuplogs/$(date-d"yesterday"+"%Y")/$(date-d"yesterday"+"%m")/usr/local/nginx/sbin/nginx-s重新加载`find/data0/backuplogs/$(date-d"30daysago"+"%Y")/$(date-d"30天前"+"%m")/-typef-mtime+30`dorm-f$oldfilesdone0000***/usr/local/sbin/cut-logs.sh2>&1>/开发/空&
