写在前面

开发者需要经常获悉Nginx的运行状态,以便进行更好的使用和维护。因此本篇首先来学习如何通过Nginx提供的ngx_http_stub_status_module模块来监控Nginx的运行状态,同时考虑到实际工作的便利性,这里还会学习如何使用NginxWebUI工具来通过网页方式配置Nginx。

Nginx状态信息

这一部分其实应该在前面就应该学习的,但是放在这里学习也是可以。通过前面的学习,我们知道在Nginx模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能就是记录Nginx的基本访问信息,可以让使用者随时掌握Nginx的工作状态。注意在编译的时候就必须增加这个模块,开发者可以使用nginx -V来检查在编译的时候是否添加了此模块:

1
2
3
4
[root@envythink vhost]# nginx -V
nginx version: nginx/1.17.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --add-module=/usr/local/nginx/third_module/echo-nginx-module-0.61

很抱歉并没有,因此接下来就尝试安装这个模块,关于第三方模块的安装前面已经介绍过,因此这里只是简单介绍,不作过多解释。

第一步,回到Nginx的下载目录,笔者为/home/envythink/nginx-1.17.0,使用如下命令对其进行编译:

1
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/third_module/echo-nginx-module-0.61 --with-http_stub_status_module

后面的 --with-http_stub_status_module是新增的,前面是之前的配置,这些都是不可以删除的。

第二步,使用make命令进行安装,切记不可使用make install命令,这样会覆盖前面已经安装的Nginx。

第三步,更新二进制文件。由于此处执行了编译和安装命令,那么接下来就需要将安装目录中的nginx命令进行更新,也就是将/home/envythink/nginx-1.17.0/objs目录下的nginx覆盖掉之前的/usr/local/nginx/sbin/目录下的nginx,使用的命令如下:

1
cp /home/envythink/nginx-1.17.0/objs/nginx /usr/local/nginx/sbin/nginx

第四步,重启Nginx并测试。接下来开发者可以使用nginx -s relaod命令来重启Nginx。

第五步,验证模块安装成功与否。接下来开发者可以使用nginx -V命令来验证ngx_http_stub_status_module模块已经安装成功,如下所示:

1
2
3
4
[root@envythink hello]# nginx -V
nginx version: nginx/1.17.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --add-module=/usr/local/nginx/third_module/echo-nginx-module-0.61 --with-http_stub_status_module

第六步,在/usr/local/nginx/conf/vhost/目录下新建status.conf文件,然后在里面新增如下代码:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name status.think.com;
location / {
stub_status on;
access_log off;
}
}

第七步,打开本地宿主机Windows系统内C:\Windows\System32\drivers\etc的文件,并在里面新增如下DNS映射:

1
192.168.73.100 status.hello.com

第八步,启动测试。开发者使用nginx -t来检查语法,当没有错误报出后,执行nginx -s reload命令来平滑启动Nginx,之后在浏览器地址栏中访问http://status.hello.com链接,可以看到页面显示如下信息:

也就是如下所示的信息:

1
2
3
4
Active connections: 2 
server accepts handled requests
2 2 11
Reading: 0 Writing: 1 Waiting: 1

可以看到一共有7个状态指标,也就是俗称的7种状态,下面分别介绍各个指标的含义:
(1)Active connections表示正在处理的活动连接数(活跃连接数),此处值为2;
(2)server表示nginx启动到现在一共处理的连接数;
(3)accepts表示nginx启动到现在一共处理了多少次握手。正常情况下握手次数和连接数是相等的,表示没有丢失;
(4)handled requests表示总共处理的连接数;
(5)Reading表示nginx读到客户端的Header信息数;
(6)Writing表示nginx返回给客户端的Header信息数;
(7)Waiting表示nginx已经处理完正在等待下一个连接。在nginx开启了keep-alive(即长连接)的情况下,客户端跟服务端建立了连接但是没有读写操作的空闲状态。

如开发者可以在nginx.conf主配置文件中添加如下配置来分别模拟长连接超时时间和短连接效果:

1
2
keepalive_timeout 65;
keepalive_timeout 0;

NginxWebUI

NginxWebUI简介

可以看到通过使用Nginx提供的ngx_http_stub_status_module模块来监控Nginx的运行状态,对新手非常不友好,且需要进行一些稍微复杂的配置才能完成相应的功能,因此这里推荐一款方便实用的Nginx网页配置工具—NginxWebUI。开发者可以利用NginxWebUI完成前面介绍的,诸如反向代理、负载均衡、端口转发、SSL配置等功能。其实它是通过可视化的界面,将上述配置信息最终生成一个nginx.conf主配置文件,然后开发者就可以将其覆盖默认的配置文件,以达到配置Nginx的目的。

NginxWebUI功能

除了前面介绍的完成反向代理、负载均衡、端口转发、SSL配置等功能以外,NginxWebUI还具有如下功能:
(1)提供对系统CPU、内存和硬盘等指标数据的运行状态监测;
(2)静态页面包可直接上传并统一管理;
(3)ssl证书可在线申请并定时续签,同时可统一对ssl进行管理及部署;
(4)用户可导入已有的nginx配置文件,也可快速克隆已有反向代理配置,还可检查反向代理的端口占用情况;
(5)集成Nginx日志解析功能,可配置是否生成Nginx日志及定时对Nginx日志进行解析;
(6)可对Nginx中配置的负载均衡节点进行运行状态的监控,同时如果节点宕机则使用邮件进行宕机告警;
(7)可以在一台服务器上远程管理其他NginxWebUI服务器,也可在一个网站上修改多数的Nginx集群配置,同时还提供Nginx集群服务运行状态监控功能,如果节点宕机则使用邮件进行宕机告警;
(8)集成Nginx校验、重启、启动、暂停等命令,可在网页上直接对Nginx运行状态进行可视化操作;
(9)……

当然不仅仅是以上所列举的8个功能,更多的信息可以点击 这里 阅读官方文档进行学习。

NginxWebUI安装

Jar包方式安装

由于NginxWebUI项目是基于SpringBoot的web系统, 数据库使用sqlite,因此服务器上不需要安装任何数据库,且可以直接下载jar包进行启动。

第一部分,下载安装java。

第一步,点击 这里,登录oracle获取jdk1.8的各个版本信息,然后进入/usr/local/目录,在里面执行wget 下载链接命令,然后使用tar -zxvf jdk-8u251-linux-x64.tar.gz命令进行解压,同时使用mv jdk-8u251-linux-x64.tar.gz jdk命令将文件进行重命名。

第二步,使用vi /etc/profile命令打开配置文件,在最底下输入以下信息:

1
2
3
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

第三步,使用使用source /etc/profile命令激活配置信息,然后使用java -version来检测是否安装成功,输出版本信息则表示java就已经安装在/usr/local/jdk目录下。

上面是按照Oracle JDK的标准步骤,笔者这里使用了open-jdk,因此安装过程略有些不同,但是输出信息如下:

1
2
3
4
[root@envythink local]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

第二部分,下载安装最新版的NginxWebUI程序包。开发者可以使用如下命令来下载NginxWebUI安装包:

1
wget http://www.nginxwebui.cn/download/nginxWebUI-2.3.1.jar

第三部分,启动下载的NginxWebUI程序包。开发者可以使用如下命令来启动之前下载的NginxWebUI安装包:

1
nohup java -jar -Xmx64m nginxWebUI-2.3.1.jar --server.port=8080 --project.home=/home/soft/ > /dev/null &

简单解释一下上述参数的含义:(1)-Xmx64m表示分配最大内存数为64m;(2)--server.port表示项目占用端口,默认以8080端口启动;(3)--project.home这是项目配置文件目录,里面存放数据库文件、证书文件、日志文件等,默认路径为/home/nginxWebUI/;(4)注意命令最后加一个&号,表示项目后台运行。

第四部分,访问NginxWebUI项目首页。开发者只需访问http://localhost:8080/即可看到如图所示的首页:

Docker方式安装

除了使用传统方式来下载安装NginxWebUI,开发者还可以使用Docker方式,注意此项目Docker镜像中同时包含Nginx和NginxWebUI,因此无需额外安装Nginx。

第一步,安装一些必要的系统工具,如下所示:

1
yum install -y yum-utils device-mapper-persistent-data lvm2

第二步,添加软件源和镜像源等信息,如下所示:

1
2
3
4
5
6
7
8
# docker 官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum缓存
yum makecache fast

第三步,下载安装Docker社区版,如下所示:

1
yum -y install docker-ce

注意上述安装的是最新版本的docker-ce,开发者也可以使用如下命令来选择安装指定版本的docker-ce,如下所示:

1
2
3
4
5
6
# 先列出repo中可用的docker-ce版本
yum list docker-ce --showduplicates |sort -r

# 安装指定版本的docker-ce
# yum install docker-ce-<VERSION STRING>
yum install docker-ce-18.06.1.ce

上面下载Docker镜像非常缓慢,因此需要开启加速。首先需要自己创建/etc/docker目录,其次新建/etc/docker/daemon.json文件。完整的操作命令如下所示:

1
2
3
4
5
mkdir /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

第四步,启动Docker后台服务。开发者可以使用如下命令来后台启动Docker:

1
2
3
4
5
6
# 启动Docker
systemctl start docker
# 设置Docker开机自启动
systemctl enable docker
# 重启守护进程
systemctl daemon-reload

第五步,验证docker安装。接下来通过运行hello-world镜像来验证docker是否已经正确安装完成:

1
docker run hello-world

当然最简单的方式就是使用docker version命令来查看版本信息,出现正确的信息就说明docker已经安装成功了。

第六步,下载镜像。开发者可以使用如下命令来下载最新版的NginxWebUI镜像:

1
docker pull registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:latest

第七步,启动容器。开发者可以使用如下命令来下载最新版的NginxWebUI镜像并启动容器:

1
docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --privileged=true --net=host registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:latest /bin/bash

请注意一下几点内容:
(1)启动容器时请使用--net=host参数, 直接映射本机端口,因为内部nginx可能使用任意一个端口,所以必须映射本机所有端口。

(2)容器需要映射路径/home/nginxWebUI:/home/nginxWebUI,此路径下存放项目所有数据文件, 包括数据库, nginx配置文件, 日志, 证书等;升级镜像时,此目录可保证项目数据不丢失,请注意备份。

(3)-e BOOT_OPTIONS参数可填充java启动参数, 可以靠此项参数修改端口号, --server.port占用端口, 不填默认以8080端口启动。

(4)日志默认存放在/home/nginxWebUI/log/nginxWebUI.log文件中。

下面是首页展示的对于系统运行状态的监控:

部分参数设置

HTTP参数设置

开发者可以在http参数配置中配置nginx的http项目,进行http转发, 默认会给出几个常用配置, 其他需要的配置可自由增删改查。可以勾选开启日志跟踪, 生成日志跟踪配置项, 每天0点时刻可生成上一天的日志分析报告。由于日志文件access.log文件过大, 默认只保留7天的log文件, 但分析报告可一直保留:

TCP参数设置

反向代理

开发者可以在反向代理中配置nginx的反向代理即server项功能, 可开启ssl功能,可以直接从网页上上传pem文件和key文件, 或者使用系统内申请的证书, 可以直接开启http转跳https功能,也可开启http2协议:

静态网页上传

开发者可以在html静态文件上传中直接上传html压缩包到指定路径,上传后可直接在反向代理中使用,省去在Linux中上传html文件的步骤:

证书管理

log管理,在http配置中如果开启了log监控的话, 会每天在这里生成日志分析报告:

远程服务器管理

远程服务器管理,如果有多台nginx服务器,可以都部署上nginxWebUI, 然后登录其中一台, 在远程管理中添加其他服务器的ip和用户名密码,就可以在一台机器上管理所有的nginx服务器了。

提供一键同步功能,可以将某一台服务器的数据配置和证书文件同步到其他服务器中:

当然上面列举的只是一部分功能,更多关于NginxWebUI的信息可以点击 这里 阅读官方文档进行学习。