Table of Contents
一、Nginx状态信息功能实战
二、Nginx错误日志的配置
三、Nginx访问日志
四、Nginx访问日志轮询切割
1、检测是否安装status模块
[root@server html]# nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --with-http_stub_status_module --add-module=echo-nginx-module-0.61
有这个--with-http_stub_status_module就对了
2、注意事项
如果你没有这个模块,则需要增加这个模块,具体增加方式请看:
https://blog.csdn.net/weixin_44571270/article/details/102887048
注意:增加完模块一定记得用ps -ef查看nginx进程,看是否是新的添加了status模块的nginx在启动,如果是nginx.bak在启动,
则kill -QUIT这个进程,再删两个配置文件,再nginx -s stop ,再nginx启动。不要用nginx -s reload ,因为这样还是会启动nginx.bak。我就是因为没看启动的是旧的nginx,所以查看信息一直没成功。
3、为一个虚拟主机配置status
server {
listen 80;
server_name www.xixi.com;
location /nginx.status{
stub_status on; //开启状态信息开关
access_log off; //因为只允许本机访问,所以不用开启访问日志
allow 172.16.193.154; //172.16.193.154这个ip地址是本机ip,只允许本机访问这个页面
deny all; //拒绝所有人访问这个页面,因此allow要放在deny前面
}
location /{
root html;
index xixi.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
注意:在配置状态信息时,一定要避免被外部用户访问,最好在一个虚拟主机中单独用一个location区块配置状态信息并限制访问的ip。
3、状态信息的查看
[root@server html]# curl www.xixi.com/nginx.status
Active connections: 1 //表示Nginx正在处理的活跃的链接数
server accepts handled requests
5 5 5
Reading: 0 Writing: 1 Waiting: 0
//第一个server:表示nginx启动到现在共处理了5个链接
//第二个accepts:表示启动到现在共成功创建了5次握手
//第三个handled requests:表示共处理了5次请求
1、错误日志的级别
debug:基本什么都会记录进错误日志。
info:仅是一些基本的讯息说明而已;
notice:比 info 还需要被注意到的一些信息内容;
warn:警示讯息,可能有问题,但是还不至于影响到某个 daemon 运作。
error :一些重大的错误讯息,这就要去找原因了。
crit:比 error 还要严重的错误信息,crit 是临界点 (critical) 的缩写,已经很严重了!
alert:警告警告,已经很有问题的等级,比 crit 还要严重!
emerg :疼痛等级,意指系统已经几乎要当机的状态! 很严重的错误信息了。
注意:生产场景一般都是warn|error|crit这三个级别之一。
2、编辑主配置文件nginx.conf,增加错误日志的配置方法:
注意:一般错误日志都配置为warn就好。logs/error.log这个其实是指定了错误日志的存储路径。
访问日志介绍:Nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module模块负责。
1、访问日志参数
(1)Nginx日志格式中默认的参数配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
注意:log_format为日志格式的开场白,日志格式的声明都要从它开始。
main可以这样理解:为后面所有定义的格式起一个名字,方便Nginx记录日志对格式进行引用。
(2)Nginx记录日志的默认参数配置:
access_log logs/access.log main;
注意:上面这句话指定了访问日志的文件名及其路径,该日志文件引用了那种日志格式。如果没有指定日志文件引用了那种日志格式,则采用默认格式combined。
2、Nginx日志变量说明
3、access_log参数说明
access_log参数的语法如下:
access_log path [format [buffer=size [flush=time]] [if=condition]];
access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
access_log syslog:server=address[,parameter=value] [format [if=condition]];
access_log off; //不记录日志
buffer=size:为存放访问日志的缓冲区大小
flush=time:为将缓冲区的日志刷到磁盘的时间
gzip[=level]:表示压缩级别
[if=condition]:表示其他条件
注意:一般的场景中以上的参数都无需配置,除非极端优化才可能会考虑这些参数
access_log指令的配置段支持:http, server, location, if in location, limit_except
日志格式默认为combined
4、访问日志配置实战
(1)查看主配置文件中的日志配置
(2)用客户端对其进行访问,再查看日志
[root@server html]# tail -1 ../logs/access.log
172.16.193.1 - - [08/Nov/2019:20:00:45 +0800] "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.2 Safari/605.1.15"
根据前面的Nginx日志变量,我们可以分析一下这个日志:
⭕️$remote_addr //对应的是真实日志里的172.16.193.1,即客户端的IP,参考解释理解
⭕️$remote_user //对应的是第二个中杠"-",代表没有远程用户
⭕️[$time_local] //对应的是[08/Nov/2019:20:00:45 +0800],代表请求发起时间
⭕️"$request" //对应的是"GET / HTTP/1.1"
⭕️$status //对应的是200状态码,表示正常访问
⭕️$body_bytes_sent //对应的是13,代表响应body的大小为13字节
⭕️"$http_referer" //对应"-" ,由于是打开域名浏览的,一次refer无值
⭕️"$http_user_agent" //对应的是"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15
(KHTML, like Gecko) Version/13.0.2 Safari/605.1.15"这里显示了你使用的浏览器的信息
⭕️"$http_x_forwarded_for" //对应的是"-" ,因为Web服务未使用代理,所以为"-"
解释:下面是我电脑的各个主要接口的ip:
shijianhundeMBP:~ shijiandingyiqingchun$ ifconfig
en0: flags=8863
options=400
ether a4:5e:60:ba:bd:51
inet6 fe80::10ba:bc95:e586:34e5%en0 prefixlen 64 secured scopeid 0x4
inet 192.168.43.159 netmask 0xffffff00 broadcast 192.168.43.255
nd6 options=201
media: autoselect
status: active
vmnet1: flags=8863
ether 00:50:56:c0:00:01
inet 192.168.17.1 netmask 0xffffff00 broadcast 192.168.17.255
vmnet8: flags=8863
ether 00:50:56:c0:00:08
inet 172.16.193.1 netmask 0xffffff00 broadcast 172.16.193.255
vmnet 8是NAT,我配置的虚拟机选取的就是NAT模式,所以返回的就是上面的172.16.193.1。有人可能会认应该是en0接口的IP才对,你要想和虚拟机进行交流和建立桥梁的是vmnet 8,所以虚拟机只知道一个vmnet 8的IP,所以不是en0接口。