前言
Nginx是一款高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP服务器。在Nginx的日常使用中,日志记录是非常重要的一部分,它可以帮助我们监控服务器的运行状态、诊断问题以及分析用户行为等。下面将介绍如何配置Nginx的日志。
http {
...
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;
error_log /var/log/nginx/error.log warn;
...
}
一、访问日志
访问日志记录每一次用户的资源请求,是最常用的数据分析来源。
1.字段配置
参数:log_format
格式:log_format 格式名 '字段格式'
(一般都是写在http下面,server里面直接引用就可以)
参考配置:
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
'$status $uptream_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
字段说明(标红的是作者认为比较重要的字段)
- $server_name:虚拟主机名称。如果nginx代理了多个域名,日志文件有没有分开,这个字段就可以起到区分的作用。
- $remote_addr:远程客户端的IP地址。
- -:空白,用一个“-”占位符替代,历史原因导致还存在。
- $remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
- [$time_local]:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
- $request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
- $status:记录请求返回的http状态码,比如成功是200。
- $upstream_addr:后端服务器的IP地址
- $upstream_status:后端服务器返回的HTTP状态码
- $body_bytes_sent:发送给客户端的文件主体内容的大小,比如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的响应时间。
2.日志配置
参数:access_log
格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
- path:是日志文件存放的路径(必填)
- format:是前面用log_format指定设置的日志格式的名称(非必填,不填就用默认格式配置)
- buffer:是设置内存缓冲区的大小,避免大量日志造成频繁磁盘读写,如果实时调试,就不要配置了
- flush:是设置缓冲区内日志的最长保存时间,超过时间也会立即写入到磁盘
- gzip: 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。
- if :设置条件判断 满足条件的才进行日志记录(可以写在http, server, location, if in location, limit_except中)
举例:
access_log /var/log/nginx/access.log man buffer=32k gzip flush=5m
不过一般简单配置就可以
access_log /var/log/nginx/access.log man
如果不开起访问日志可以配置 access_log off;
3.默认配置
默认的nginx的日志配置如下:
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log combined;
二、错误日志
日志级别支持:debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大。
error_log 可以在main,http,mail,stream,server,loaction 范围中定义,但是一般在man下面创建一个就可以了。(配置里面可以配置多个错误日志,但是相同范围下,多个配置会报错(例如http里面只能配置一个错误日志,配置多个会报错;http配置了,location里面一样可以配置))
配置格式:
error_log 日志文件(文件路径+文件名) 错误级别(非必选,默认error);
举例:
error_log /var/log/nginx/error.log error;
如果不开起错误日志可以配置 error_log off;
版权归原作者 龙叔运维 所有, 如有侵权,请联系我们删除。