Nginx日志
关于日志,包括访问日志和错误日志,nginx主配置文件里边都写的有,但是如果一个主机配置的子节点比较多,那么所有的日志都集中在一个文件就非常麻烦了,非常影响日后查看。
最好的方法就是,给每一个节点,也就是虚拟主机配置独立的错误日志和访问日志。
错误日志:发生故障的时候可以查看,4xx,5xx,可以i 通过错误级别指定,error_log;
访问日志:记录着用户什么时候访问,网站哪些页面,客户端信息。可以通过log_format定义访问日志的格式,access_log;
1)错误日志:
错误日志:主要指定错误日志的位置和错误级别。
格式:error_log 文件名 错误日志级别;
指令放在哪:main, http, mail, stream, server, location,这些地方都可以;
关于错误日志的级别:debug, info, notice, warn, error, crit, alert, or emerg。左到右,越来越粗糙. 记录信息的详细程度。
如果使用debut,一般别用,记录的信息太多,调试的时候可以短时间开启使用一下,网站访问量特别大的时候别开。
如何给虚拟主机定义自己的错误日志?
1、把主配置文件里边的东西注释掉。
2、在子节点配置文件中添加配置。
[root@web01 ~]# grep "error_log" /etc/nginx/nginx.conf
# error_log /var/log/nginx/error.log notice;
[root@web01 ~]# cat sys.test.cn.conf
server {
listen 80;
server_name sys.test.cn;
error_log /var/log/nginx/sys.test.cn error.log notice;
root /app/code/cxk;
location / {
index index.html;
}
}
2)访问日志
可以辅助我们进行分析,网站访问量,ip,pv
格式:log_format 格式名字 格式.....;
放在哪里: http
Ngx访问日志格式(ngx内置变量) | 说明 |
$remote_addr | 客户端ip地址 |
remote_user | 用户名(空,进行认证用户) |
$time_local | 时间 3/Feb/2023:17:44:31 +0800 |
$request | 请求报文的起始行(请求方法 URI HTTP/1.1) |
$status | http状态码 |
$body_bytes_sent | 响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节 |
$http_referer | 从哪里跳转,访问到这个网站的. 网站运营分析 |
$http_user_agent | 客户端代理(浏览器) |
$http_x_forwarded_for | XFF头,负载中使用,记录用户真实的ip地址. |
这些在主配置文件里有定义。
access_log指定日志,使用对应格式
access_log 日志位置 格式
放在哪:http , server , location , if in location , limit_except
给每个节点主机添加访问日志
[root@web01 ~]# cat sys.test.cn.conf
server {
listen 80;
server_name sys.test.cn;
error_log /var/log/nginx/sys.test.cn error.log notice;
access_log /var/log/nginx/sys.test.cn access.log main;
root /app/code/cxk;
location / {
index index.html;
}
}
# 这里也需要注释掉主配置文件里的定义
[root@web01 ~]# grep "access_log" /etc/nginx/nginx.conf
# access_log /var/log/nginx/access.log main;
访问日志其他选项access_log(了解,未来根据需要进行配置)
访问日志进行压缩:gzip需要通过zcat/zless/zgrep查看
进行缓存: buffer = 32k 先把日志写入到内存中,定期写入到磁盘
定义刷新时间: flush =10s
[root@web01 ~]# cat sys.test.cn.conf
server {
listen 80;
server_name sys.test.cn;
error_log /var/log/nginx/sys.test.cn error.log notice;
access_log /var/log/nginx/sys.test.cn access.log main gzip buffer=32k flush=10s;
root /app/code/cxk;
location / {
index index.html;
}
}
ngx日志小结
错误日志error_log与错误日志级别debug,notice
访问日志常见格式log_format说出常用的格式,可以查看ngx访问日志并知晓常见部分的含义.
定义与使用access_log
Location规则
在我们的网站当中,很多时候是需要有后端管理系统的,但这个后端管理,则不能公之于众,只能内部管理使用,这就对安全性有了新的要求,最简单直接的举例,禁止外网访问,只能内部访问。
基于此,我们可以建立新的文件夹来存放内部管理的页面,那么就产生了新的uri,所以我们可以针对uri进行访问权限设定,来实现访问策略。
这里的uri,可不是平时说的URL,是指域名后面的内容,就类似将域名比作根节点,访问的是根下边对应的目录文件。
URL网址 https:Վˌnginx.org/en/docs/
URI: /en/docs/
来做个小实验看一下,需求如下:
域名:sys.test.cn
站点目录:/app/code/sys/ 首页文件index.html
后台管理页面:/app/code/sys/admin/index.html
要求后台只能内网访问:172.16.1.0/24网段.
[root@web01 /etc/nginx/conf.d]# cat sys.test.cn.conf
server {
listen 80;
server_name sys.test.cn;
root /app/code/sys;
location / {
index index.html;
}
#sys.test.cn/admin/
#uri: /admin/
location /admin/ {
#准许172.16.1.0/24网段访问
allow 172.16.1.0/24;
#拒绝所有
deny all;
}
}
[root@web01 ~]# mkdir -p /app/code/buy/admin/
[root@web01 ~]# echo "sys.test.cn" >/app/code/sys/index.html
[root@web01 ~]# echo "admin dangerous sys.test.cn" >/app/code/sys/admin/index.html
访问测试:[root@web01 ~]# curl -H Host:sys.test.cn http://192.168.1.7
[root@web01 ~]# curl -H Host:sys.test.cn http://192.168.1.7/admin/
[root@web01 ~]# curl -H Host:sys.test.cn http://172.16.1.7/admin/
location还可以设置缓存策略
部署一个网站,要求设置缓存,网站中html,js,css结尾的文件缓存1天,图片缓存1小时,这也是普遍网站的一个加速策略
[root@web01 ~]# cat /etc/nginx/conf.d/bird.cn.conf
server {
listen 80;
server_name bird.test.cn;
root /app/code/bird;
location / {
index index.html;
}
#uri包含 .html或.js或.css 缓存1天
location ~* \.(html|js|css)$ {
expires max;
#expires 1d;
}
#uri包含 .jpg 或 .jpeg 或 .png 或 .gif 或 .bmp
location ~* \.(jpg|jpeg|png|gif|bmp)$ {
expires 1h;
}
}
小结
location规则与正则. perl \d
location ~*
expires设置浏览器缓存
location规则小结:
1、location / {xxxx}:默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹
配默认的规则.
2、 location /image/ {}:用于匹配请求的uri (路径),sys.test.cn/imgage/test.html
3、 location ~ \.(jpg|jpeg)$ {}:支持正则,区分大小写 sys.test.cn/test.jpg
4、location ~* \.(jpg|jpeg)$ {}:支持正则,不区分大小写 sys.test.cn/test.jpg
5、location ^~ /test/: 不支持正则,仅仅匹配普通字符,很少使用,优先.
6、location = /50x.html:不支持正则,精确匹配,使用较少
7、location @名字 {}:命名的location一般用于return/error_log 跳转。location匹配的时候优先级
1、=
2、^~
3、~ ~*
4、/image/
5、/location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
测试与访问
“/” A
“/index.html” B
“/documents/document.html” C
“/images/1.gif” D
“/documents/1.jpg” E