开启状态界面
首先要在编译的时候安装相应的软件包--with-http_gzip_static_module ,然后去配置文件中添加内容,最后去浏览器中去访问即可
[root@nginx conf]
/usr/local/nginx/conf
[root@nginx conf]
......
location / {
root html;
index index.html;
}
//添加一下三行内容
location /status {
stub_status;
}
......
//重新加载配置文件
[root@nginx conf]
网页去查看页面状态信息 状态页面信息详解:
状态码 | 表示的意义 |
---|
Active connections 2 | 当前所有处于打开状态的连接数 | accepts | 总共处理了多少个连接 | handled | 成功创建多少握手 | requests | 总共处理了多少个请求 | Reading | nginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数;读取 | Writing | nginx返回给客户端的Header信息数,表示请求已经接收完成,且正处于处理请求或发送响应的过程中的连接数 ;写入 | Waiting | 开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx已处理完正在等候下一次请求指令的驻留连接 ;等待 |
zabbix监控Nginx页面状态信息
在Nginx服务器上安装zabbix_agent客户端
1、下载所需的依赖包,并且解压zabbix包到/usr/src中,创建用户、然后解压 。
[root@localhost ]
[root@localhost src]
[root@localhost src]
uid=989(zabbix) gid=985(zabbix) 组=985(zabbix)
[root@localhost src]
[root@localhost src]
2、编译安装agent
[root@localhost zabbix-5.4.4]
[root@localhost zabbix-5.4.4]
[root@localhost zabbix-5.4.4]
zabbix_agentd.conf zabbix_agentd.conf.d
3、更改配置文件并启动
更改配置文件中的server端被动模式和主动模式的IP地址、还有Hostname要改成全局唯一的一个名字。后面web界面也要输入这个名字
[root@localhost etc]
/usr/local/etc
[root@localhost etc]
......
Server=192.168.164.128 //被动模式
ServerActive=192.168.164.128 //主动模式
Hostname=Nginx
......
[root@localhost etc]
[root@localhost etc]
[root@localhost etc]
...
SELINUX=disabled
...
[root@localhost etc]
[root@nginx etc]
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]
Active connections: 1
server accepts handled requests
9 9 9
Reading: 0 Writing: 1 Waiting: 0
1、编写脚本
[root@nginx scripts]
reading.sh waiting.sh writing.sh
//监控Reading的值
[root@nginx scripts]
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]
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]
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]
/usr/local/etc
[root@nginx etc]
......
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]
[root@nginx etc]
[root@nginx etc]
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]
Active connections: 1
server accepts handled requests
184 184 184
Reading: 0 Writing: 1 Waiting: 0
//为实现效果,把大于30改成等于0触发
[root@nginx scripts]
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]
[root@nginx etc]
系统检测到问题,触发报警
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]
/usr/local/nginx/conf
[root@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。
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
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]
[root@nginx ms]
[root@nginx ms]
1.jpg
移动的文件位置所以找不到,需要跟改配置文件,让访问老地址请求重定向到新地址
[root@nginx conf]
......
location /status {
stub_status;
}
//添加以下内容
location /ms {
rewrite ^/ms/(.*\.jpg) /msa/$1 break; //把访问ms目录中所有以.jpg结尾的请求,重定向到mas目录中的.jpg
}
......
//重新加载配置文件
[root@nginx conf]
现在可以访问到变动位置的资源了,而且地址还是一样的。 ② 修改配置文件
[root@nginx conf]
......
location /status {
stub_status;
}
//添加以下内容
location /ms {
rewrite ^/ms/(.*\.jpg) http://image.baidu.com/ break; //把访问ms目录中所有以.jpg结尾的请求,重定向到百度图库中
}
//重新加载配置文件
[root@nginx conf]
if
语法:if (condition) {...}
应用场景:
常见的condition
-
变量名(变量值为空串,或者以“0”开始,则为false,其它的均为true) -
以变量为操作数构成的比较表达式(可使用=,!=类似的比较操作符进行测试) -
正则表达式的模式匹配操作 ~:区分大小写的模式匹配检查 ~*:不区分大小写的模式匹配检查 ! ~ 和 ! ~ *:对上面两种测试取反 -
测试指定路径为文件的可能性(-f,!-f) -
测试指定路径为目录的可能性(-d,!-d) -
测试文件的存在性(-e,!-e) -
检查文件是否有执行权限(-x,!-x)
基于浏览器分离 这种方式现在使用比较少,在以前软件兼容性不是很好的时候会使用这种方式,Nginx会根据不同的浏览器来分配相应浏览器的资源,如果是Firefox(火狐浏览器)就会到火狐目录中查找用户要访问的资源。
[root@nginx conf]
/usr/local/nginx/conf
[root@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;
}
|