一、nginx日志介绍
Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。
1.日志格式通过log_format命令定义格式
在nginx配置文件里,有一串log_format日志格式。
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 /var/log/nginx/access.log main;
2.log_format常用变量
$remote_addr # 记录客户端IP地址 $remote_user # 记录客户端用户名 $time_local # 记录通用的本地时间 $time_iso8601 # 记录ISO8601标准格式下的本地时间 $request # 记录请求的方法以及请求的http协议 $status # 记录请求状态码(用于定位错误信息) $body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小 $bytes_sent # 发送给客户端的总字节数 $msec # 日志写入时间。单位为秒,精度是毫秒。 $http_referer # 记录从哪个页面链接访问过来的 $http_user_agent # 记录客户端浏览器相关信息 $http_x_forwarded_for #记录用户真实IP地址 $request_length # 请求的长度(包括请求行, 请求头和请求正文)。 $request_time # 请求花费的时间,单位为秒,精度毫秒 # 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客户端真实的IP地址。 # $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中, # 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
二、nginx日志切割
使用logrotate切割日志
[root@web01 nginx]# cat /etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress not if empty create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
/var/log/nginx/*.log ——- #要切割的日志存放位置
daily ——————– #每天切割日志
missingok ————- #日志丢失忽略
rotate 52 —————— #日志保留52天
compress ———— #日志文件压缩
delaycompress ——- #延迟压缩日志
not if empty ————- #不切割空文件
create 640 nginx adm —— #日志文件权限
sharedscripts ——- #脚本起始
postrotate ————- #切割日志执行的命令,标注脚本内容
endscript ———— #脚本结束
三、日志配置实例
server { listen 80; server_name code.oldboy.com; #将当前的server网站的访问日志记录至对应的目录,使用main格式 access_log /var/log/nginx/code.oldboy.com.log main; location / { root /code; } #当有人请求改favicon.ico时,不记录日志 location /favicon.ico { access_log off; return 200; } } ----------/js/common.js 放入js.log这个文件中------------------ server { listen 80; server_name code.oldboy.com; #将当前的server网站的访问日志记录至对应的目录,使用main格式 access_log /var/log/nginx/code.oldboy.com.log main; location /js/common.js { access_log /var/log/nginx/js.log main; } }