IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx配置文件详解③ -> 正文阅读

[系统运维]Nginx配置文件详解③

开启状态界面

首先要在编译的时候安装相应的软件包--with-http_gzip_static_module,然后去配置文件中添加内容,最后去浏览器中去访问即可

[root@nginx conf]# pwd
/usr/local/nginx/conf
[root@nginx conf]# vim nginx.conf
......
location / {
     root html;
     index index.html;
}
//添加一下三行内容
        location /status {   
                stub_status;
}
 ......

//重新加载配置文件
[root@nginx conf]# nginx -s reload

网页去查看页面状态信息
在这里插入图片描述状态页面信息详解:

状态码表示的意义
Active connections 2当前所有处于打开状态的连接数
accepts总共处理了多少个连接
handled成功创建多少握手
requests总共处理了多少个请求
Readingnginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数;读取
Writingnginx返回给客户端的Header信息数,表示请求已经接收完成,且正处于处理请求或发送响应的过程中的连接数 ;写入
Waiting开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx已处理完正在等候下一次请求指令的驻留连接 ;等待

zabbix监控Nginx页面状态信息

在Nginx服务器上安装zabbix_agent客户端

1、下载所需的依赖包,并且解压zabbix包到/usr/src中,创建用户、然后解压 。

[root@localhost ]# yum -y install gcc gcc-c++ make pcre-devel openssl openssl-devel

[root@localhost src]# useradd -r -M -s /sbin/nologin zabbix
[root@localhost src]# id zabbix
uid=989(zabbix) gid=985(zabbix)=985(zabbix)
[root@localhost src]# tar xf zabbix-5.4.4.tar.gz 
[root@localhost src]# cd zabbix-5.4.4/

2、编译安装agent

[root@localhost zabbix-5.4.4]# ./configure --enable-agent
[root@localhost zabbix-5.4.4]# make install
#安装完过后在/usr/local/etc/下会有agent配置文件
[root@localhost zabbix-5.4.4]# ls /usr/local/etc/
zabbix_agentd.conf  zabbix_agentd.conf.d

3、更改配置文件并启动

更改配置文件中的server端被动模式和主动模式的IP地址、还有Hostname要改成全局唯一的一个名字。后面web界面也要输入这个名字

[root@localhost etc]# pwd
/usr/local/etc
[root@localhost etc]# vim zabbix_agentd.conf
......
Server=192.168.164.128   //被动模式
ServerActive=192.168.164.128  //主动模式
Hostname=Nginx
......
#关闭防火墙和selinux
[root@localhost etc]# systemctl stop firewalld.service 
[root@localhost etc]# setenforce 0
[root@localhost etc]# vim /etc/selinux/config
...
SELINUX=disabled
...
[root@localhost etc]# zabbix_agentd 
[root@nginx etc]# ss -antl
State      Recv-Q Send-Q                          Local Address:Port                                         Peer Address:Port              
LISTEN     0      128                                         *:10050                                                   *:*                  
LISTEN     0      128                                         *:80                                                      *:*                  
LISTEN     0      128                                         *:22                                                      *:*                  
LISTEN     0      100                                 127.0.0.1:25                                                      *:*                  
LISTEN     0      128                                        :::22                                                     :::*                  
LISTEN     0      100                                       ::1:25                                                     :::*            

4、web界面添加主机
配置—主机—右上角添加主机,这里的主机名一定要和配置文件中hostname一样

在这里插入图片描述添加一下模板 点击主机名—选择模板—选择zabbix agent 短的那个即可。 随后刷新一下页面主机就启动了
在这里插入图片描述

编写脚本,让zabbix监控Nginx状态

reading值大 很多请求在等待接受 处理能力不够
writing值大 对端处理能力低、网络慢
waiting值大 说明工作很闲 处理任务不饱和
waiting值越小越好 工作饱和 只有几个人在等待,如果没有人等待表示工作不饱和很闲,实际中不会这么浪费 会近可能的给机器安排工作。

监控Nginx页面状态信息Reading、Writing、Waiting

[root@nginx scripts]# curl http://192.168.164.128/status
Active connections: 1 
server accepts handled requests
 9 9 9 
Reading: 0 Writing: 1 Waiting: 0 

1、编写脚本

[root@nginx scripts]# ls
reading.sh  waiting.sh  writing.sh

//监控Reading的值
[root@nginx scripts]# cat reading.sh 
#/bin/bash
Reading=$(curl  -s http://192.168.164.128/status | awk 'NR==4{print $2}')
if [ $Reading -gt 80 ];then
        echo "1"
else
        echo "0"
fi

//监控Writing的值
[root@nginx scripts]# cat writing.sh 
#/bin/bash
writing=$(curl  -s http://192.168.164.128/status | awk 'NR==4{print $4}')
if [ $writing -gt 50 ];then
        echo "1"
else
        echo "0"
fi


//监控waiting的值
[root@nginx scripts]# cat waiting.sh 
#/bin/bash
waiting=$(curl  -s http://192.168.164.128/status | awk 'NR==4{print $6}')
if [ $waiting -gt 30 ];then
        echo "1"
else
        echo "0"
fi

2、修改配置文件

[root@nginx etc]# pwd
/usr/local/etc
[root@nginx etc]# vim zabbix_agentd.conf
......
UnsafeUserParameters=1
......
# 配置文件最后面添加一下内容
UserParameter=check_reading,/scripts/reading.sh   //检查reading ,执行脚本检查readig值
UserParameter=check_waiting,/scripts/waiting.sh
UserParameter=check_writing,/scripts/writing.sh

3、重启服务

[root@nginx etc]# pkill zabbix
[root@nginx etc]# zabbix_agentd 
[root@nginx etc]# ss -antl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128     *:10050               *:*                  
LISTEN      0      128     *:80                  *:*                  
LISTEN      0      128     *:22                  *:*                  
LISTEN      0      100    127.0.0.1:25                  *:*                  
LISTEN      0      128    :::22                 :::*                  
LISTEN      0      100       ::1:25                 :::*         

4、web界面配置触发器和报警器

本次只演示添加一个监控项,其他两个监控项和这个部署一致。

添加监控项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加触发器

在这里插入图片描述
在这里插入图片描述

Nginx所添加的所有监控项和触发器
在这里插入图片描述
在这里插入图片描述
5、实验
因为此次的效果不好操作,所以把waiting触发条件改成等于0时触发

[root@nginx etc]# curl http://192.168.164.128/status
Active connections: 1 
server accepts handled requests
 184 184 184 
Reading: 0 Writing: 1 Waiting: 0 

//为实现效果,把大于30改成等于0触发
[root@nginx scripts]# vim waiting.sh
#/bin/bash
waiting=$(curl  -s http://192.168.164.128/status | awk 'NR==4{print $6}')
if [ $waiting -eq 0 ];then
        echo "1"
else
        echo "0"
fi

//重启zabbix
[root@nginx etc]# pkill zabbix
[root@nginx etc]# zabbix_agentd

系统检测到问题,触发报警
在这里插入图片描述

rewrite

应用场景:
如果公司的某个文件换了位置,而老用户不知道换位置了还是用原来的地址访问,肯定是访问不到的,所以这个时候就要用的rewrite重定向URL。把所有原老位置的请求,全部重定向转给现在新的位置。这样用户即可用老地址,也可以用新地址。

语法:rewrite regex replacement flag·;如:

//把/images/下说有以.jpg的访问请求都转移到/imgs/中的.jpg
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;    //rewrite规则

还有一种叫做盗链的方式如下:

//也可以将请求转发给另外一个网站,俗称盗链
rewrite ^/bbs/(.*)$ http://www.idfsoft.com/index.html redirect;   //rewrite规则

防止盗链的方式:

[root@nginx conf]# pwd
/usr/local/nginx/conf
[root@nginx conf]# vim nginx.conf
......
location / {
                root html;
                index index.html;
        }

//添加以下内容
//查看链接是否有效,看是不是从主页点进来的,是的话就用idfsoft网站提供数据,如果是直接访问某个地方资源就是无效的,就把资源重定向到403.html页面上
location ~* \.(jpg|gif|jpeg|png)$ {     //匹配这些格式的请求
  valid_referers none blocked www.idfsoft.com;  //valid_referer:链接是否有效 
  if ($invalid_referer) {
    rewrite ^/ http://www.idfsoft.com/403.html;   //rewrite规则
  }
}
......

常见的flag:

flag作用
last基本上都用这个flag,表示当前的匹配结束,继续下一个匹配,最多匹配10个到20个一旦此rewrite规则重写完成后,就不再被后面其它的rewrite规则进行处理而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
break中止Rewrite,不再继续匹配一旦此rewrite规则重写完成后,由UserAgent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查
redirect以临时重定向的HTTP状态302返回新的URL
permanent以永久重定向的HTTP状态301返回新的URL

rewrite模块的作用是用来执行URL重定向。这个机制有利于去掉恶意访问的url,也有利于搜索引擎优化(SEO)

flag详解

//以下这种来回重定向的,如果都是last那么最后会转到baidu.com。
# 先是匹配ms然后转给msa,last是继续匹配下一条,所以就开始匹配第二条然后又转给百度。
location /ms {
             rewrite ^/ms/(.*\.jpg)  /msa/$1 last;   
        }
 
 location /msa {
             rewrite ^/msa/(.*\.jpg)  http://baidu.com last;   
        }


//这种情况最后访问的是/msa中的资源,因为break是终止匹配,不会匹配下面的/msa,所以就由/msa/$1提供资源。
location /ms {
             rewrite ^/ms/(.*\.jpg)  /msa/$1 break;   
        }
 
 location /msa {
             rewrite ^/msa/(.*\.jpg)  http://baidu.com last;   
        }


//以下这种情况是访问不到的状态码是500,服务器找不到资源。而实际情况是有资源,但是配置的有问题,找不到,所以就导致了报500状态码服务器错误
location /ms {
             rewrite ^/ms/(.*\.jpg)  /msa/$1 last;   
        }
 
 location /msa {
             rewrite ^/msa/(.*\.jpg)  /ms/$1 last;   
        }


//这种情况访问的是msa
# 因为http://192.168.164.128/ms/1.jpg   先匹配的是第二条ms,而这个flag是break终止,所以是mas提供的资源
location /msa {
             rewrite ^/ms/(.*\.jpg)  /ms/$1 last;   
        }
 
 location /ms {
             rewrite ^/msa/(.*\.jpg)  /msa/$1 break;   
        }

nginx使用的语法源于Perl兼容正则表达式(PCRE)库,基本语法如下:

标识符意义
^必须以^后的实体开头
$必须以$前的实体结尾
.匹配任意字符
[]匹配指定字符集内的任意字符
[^]匹配任何不包括在指定字符集内的任意字符串
()分组,组成一组用于匹配的实体,通常会有

实验:
实验要求
1、网找找一个照片放到html中,然后在把这个图片放到html另外一个目录,最终要实现,访问老地址依旧可以找到这个照片。
2、访问老地址时重定向到百度图库中。


在这里插入图片描述

[root@nginx ms]# mv 1.jpg /usr/local/nginx/html/msa/
[root@nginx ms]# ls
[root@nginx ms]# ls /usr/local/nginx/html/msa/
1.jpg

移动的文件位置所以找不到,需要跟改配置文件,让访问老地址请求重定向到新地址
在这里插入图片描述

[root@nginx conf]# vim nginx.conf
......
       location /status {
                stub_status;
        }
//添加以下内容
        location /ms {
             rewrite ^/ms/(.*\.jpg)  /msa/$1 break;   //把访问ms目录中所有以.jpg结尾的请求,重定向到mas目录中的.jpg
        }
......


//重新加载配置文件
[root@nginx conf]# nginx -s reload

现在可以访问到变动位置的资源了,而且地址还是一样的。
在这里插入图片描述

修改配置文件

[root@nginx conf]# vim nginx.conf
......
       location /status {
                stub_status;
        }
//添加以下内容
        location /ms {
             rewrite ^/ms/(.*\.jpg)  http://image.baidu.com/ break;   //把访问ms目录中所有以.jpg结尾的请求,重定向到百度图库中
        }
//重新加载配置文件
[root@nginx conf]# nginx -s reload

在这里插入图片描述

if

语法:if (condition) {...}

应用场景:

  • server段
  • location段

常见的condition

  • 变量名(变量值为空串,或者以“0”开始,则为false,其它的均为true)

  • 以变量为操作数构成的比较表达式(可使用=,!=类似的比较操作符进行测试)

  • 正则表达式的模式匹配操作
    ~:区分大小写的模式匹配检查
    ~*:不区分大小写的模式匹配检查
    ! ~ 和 ! ~ *:对上面两种测试取反

  • 测试指定路径为文件的可能性(-f,!-f)

  • 测试指定路径为目录的可能性(-d,!-d)

  • 测试文件的存在性(-e,!-e)

  • 检查文件是否有执行权限(-x,!-x)

基于浏览器分离
这种方式现在使用比较少,在以前软件兼容性不是很好的时候会使用这种方式,Nginx会根据不同的浏览器来分配相应浏览器的资源,如果是Firefox(火狐浏览器)就会到火狐目录中查找用户要访问的资源。

[root@nginx conf]# pwd
/usr/local/nginx/conf
[root@nginx conf]# vim nginx.conf
if ($http_user_agent ~ Firefox) {
  rewrite ^(.*)$ /firefox/$1 break;
}

if ($http_user_agent ~ MSIE) {
  rewrite ^(.*)$ /msie/$1 break;
}

if ($http_user_agent ~ Chrome) {
  rewrite ^(.*)$ /chrome/$1 break;
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:27:02  更:2021-10-29 13:28:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:25:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码