状态界面
//开启状态界面
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
allow 192.168.71.1/24;
deny all;
}
[root@localhost ~]# nginx -s stop;nginx
访问状态页面的方式:http://server_ip/status
状态页面信息详解:
状态码 | 表示的意义 |
---|---|
Active connections 2 | 当前所有处于打开状态的连接数 |
accepts | 总共处理了多少个连接 |
handled | 成功创建多少握手 |
requests | 总共处理了多少个请求 |
Reading | nginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数 |
Writing nginx | 返回给客户端的Header信息数,表示请求已经接收完成,且正处于处理请求或发送响应的过程中的连接数 |
Waiting | 开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx已处理完正在等候下一次请求指令的驻留连接 |
状态界面监控
zabbix客户端安装
//关闭防火墙和selinux
//创建用户
[root@localhost ~]# useradd -r -M -s /sbin/nologin zabbix
//安装依赖包
[root@localhost ~]# yum -y install wget vim gcc gcc-c++ make pcre-devel openssl openssl-devel
//下载并解压zabbix
[root@localhost ~]# cd /usr/src/
[root@localhost src]# ls
debug kernels nginx-1.20.1 zabbix-5.4.4.tar.gz
[root@localhost src]# tar xf zabbix-5.4.4.tar.gz
[root@localhost src]# cd zabbix-5.4.4/
[root@localhost zabbix-5.4.4]# ls
aclocal.m4 ChangeLog config.sub database install-sh man README
AUTHORS compile configure depcomp m4 misc sass
bin conf configure.ac include Makefile.am missing src
build config.guess COPYING INSTALL Makefile.in NEWS ui
//编译安装
[root@localhost zabbix-5.4.4]# ./configure --enable-agent
......
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
[root@localhost zabbix-5.4.4]# make install
//修改配置文件
[root@localhost ~]# cd /usr/local/etc/
[root@localhost etc]# ls
zabbix_agentd.conf zabbix_agentd.conf.d
[root@localhost etc]# vim zabbix_agentd.conf
113 Server=192.168.71.134 //指定zabbix服务端IP
154 ServerActive=192.168.71.134 //指定zabbix服务端IP
165 Hostname=nginx //指定主机名,zabbix web界面添加主机时的需要填写的主机名
//开机自启
[root@localhost ~]# cp /usr/src/zabbix-5.4.4/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@agent ~]# cat /usr/lib/systemd/system/zabbix_agentd.service
[Unit]
Description=zabbix server daemon
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/zabbix_agentd start
ExecStop=/etc/init.d/zabbix_agentd stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
[root@agent ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable --now zabbix_agentd
Synchronizing state of zabbix_agentd.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable zabbix_agentd
[root@localhost ~]# ss -anltu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
//编写脚本
脚本位置不要放在/root目录下,zabbix用户无法进入/root目录
[root@localhost ~]# cat /opt/scripts/get_nginx_status.sh
#!/bin/bash
NGINX_SERVER="192.168.71.138"
NGINX_URL="http://${NGINX_SERVER}/status"
function get_active() {
curl -s ${NGINX_URL} | grep "Active" | awk -F ":" '{print $2}'
}
function get_reading() {
curl -s ${NGINX_URL} | grep "Reading" | awk -F ":" '{print $2}' | awk -F " " '{print $1}'
}
function get_writing() {
curl -s ${NGINX_URL} | grep "Writing" | awk -F ":" '{print $3}' | awk -F " " '{print $1}'
}
function get_waiting() {
curl -s ${NGINX_URL} | grep "Waiting" | awk -F ":" '{print $4}' | awk -F " " '{print $1}'
}
function get_accepts() {
curl -s ${NGINX_URL} | awk NR==3 | awk -F " " '{print $1}'
}
function get_handled() {
curl -s ${NGINX_URL} | awk NR==3 | awk -F " " '{print $2}'
}
function get_requests() {
curl -s ${NGINX_URL} | awk NR==3 | awk -F " " '{print $3}'
}
case $1 in
active)
get_active
;;
reading)
get_reading
;;
writing)
get_writing
;;
waiting)
get_waiting
;;
accepts)
get_accepts
;;
handled)
get_handled
;;
requests)
get_requests
;;
*)
echo "Usage: $0 {active | reading | writing | waiting | accepts | handled | requests}"
esac
//修改配置文件,加入脚本位置,让zabbix能执行脚本
[root@localhost ~]# tail -8 /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=nginx.active, /opt/scripts/get_nginx_status.sh active
UserParameter=nginx.reading, /opt/scripts/get_nginx_status.sh reading
UserParameter=nginx.writing, /opt/scripts/get_nginx_status.sh writing
UserParameter=nginx.waiting, /opt/scripts/get_nginx_status.sh waiting
UserParameter=nginx.accepts, /opt/scripts/get_nginx_status.sh accepts
UserParameter=nginx.handled, /opt/scripts/get_nginx_status.sh handled
UserParameter=nginx.requests, /opt/scripts/get_nginx_status.sh requests
//重启zabbix客户端
[root@localhost ~]# systemctl restart zabbix_agentd.service
zabbix监控端测试
//能够成功执行客户端脚本,并取到对应值
[root@zabbix ~]# zabbix_get -s 192.168.71.138 -k nginx.accepts
25
[root@zabbix ~]# zabbix_get -s 192.168.71.138 -k nginx.accepts
26
[root@zabbix ~]# zabbix_get -s 192.168.71.138 -k nginx.waiting
0
[root@zabbix ~]# zabbix_get -s 192.168.71.138 -k nginx.writing
1
[root@zabbix ~]# zabbix_get -s 192.168.71.138 -k nginx.reading
0
web界面
rewrite
语法:rewrite regex replacement flag;,如:
//所有访问/images目录下的jpg文件的请求都重定向到/imgs目录下jpg文件来响应
rewrite ^/images/(..jpg)$ /imgs/$1 break; //此处的$1用于引用(..jpg)匹配到的内容
//所有访问/bbs目录下的文件的请求都重定向到http://www.idfsoft.com/index.html这个网页来响应
rewrite ^/bbs/(.*)$ http://www.idfsoft.com/index.html redirect;
replacement可以是某个路径,也可以是某个URL
常见的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)
nginx使用的语法源于Perl兼容正则表达式(PCRE)库,基本语法如下:
标识符 | 意义 |
---|---|
^ | 必须以^后的实体开头 |
$ | 必须以$前的实体结尾 |
. | 匹配任意字符 |
[] | 匹配指定字符集内的任意字符 |
[^] | 匹配任何不包括在指定字符集内的任意字符串 |
匹配 之前或之后的实体 | |
() | 分组,组成一组用于匹配的实体,通常会有 |
捕获子表达式,可以捕获放在()之间的任何文本,比如:
^(hello|sir)$ //字符串为“hi sir”捕获的结果:$1=hi$2=sir
//这些被捕获的数据,在后面就可以当变量一样使用了
案例
重定向到本地资源
//在html目录下创建一个目录存放一个jpg文件
[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# mkdir images
[root@localhost images]# ls
1.jpg
//修改images目录名称为imgs
[root@localhost html]# mv images/ imgs
[root@localhost html]# ls
50x.html imgs index.html
[root@localhost html]# ls imgs/
1.jpg
重定向
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
48 location /images {
49 rewrite ^/images/(.*\.jpg)$ /imgs/$1 break; //访问images/下的jpg文件重定向到imgs/下的jpg文件响应
50 }
[root@localhost ~]# nginx -s stop;nginx
//重定向到网络资源
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
48 location /images {
49 rewrite ^/images/(.*\.jpg)$ http://www.itwangqing.net.cn/15347293082090.html#toc_28 break; //将重定向到本地资源路径改为网络资源的URL
50 }
[root@localhost ~]# nginx -s stop;nginx
if
语法:if (condition) {…}
应用场景:
server段
location段
常见的condition
变量名(变量值为空串,或者以“0”开始,则为false,其它的均为true)
以变量为操作数构成的比较表达式(可使用=,!=类似的比较操作符进行测试)
正则表达式的模式匹配操作
~:区分大小写的模式匹配检查
~:不区分大小写的模式匹配检查
!和!:对上面两种测试取反
测试指定路径为文件的可能性(-f,!-f)
测试指定路径为目录的可能性(-d,!-d)
测试文件的存在性(-e,!-e)
检查文件是否有执行权限(-x,!-x)