nginx的配置

状态界面

//开启状态界面
[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已处理完正在等候下一次请求指令的驻留连接

nginx的配置
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界面

nginx的配置

nginx的配置

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

nginx的配置

//修改images目录名称为imgs
[root@localhost html]# mv images/ imgs
[root@localhost html]# ls
50x.html  imgs  index.html
[root@localhost html]# ls imgs/
1.jpg

nginx的配置

重定向

[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

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)

上一篇:python告诉你如何跟着小红书学送礼物


下一篇:技术分享 | 技术分享 | Zabbix 监控 TiDB (二)