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