-
玩转Nginx分布式架构:
- 1.学习Nginx 详细介绍(负载均衡、全局异常、跨域、封禁IP、路径匹配、地址重定向、Websocket反向代理、缓存、压缩)
- 2.使用Nginx配置域名
- 3.使用Nginx配置HTTPS传输协议
- 4.Nginx整合OpenResty+Lua (黑名单控制、内网访问限制、资源下载限速、日志分析、漏桶原理、令牌桶原理)
- 5.Nginx高可用解决方案LVS+KeepAlived
- 6.Nginx高可用后配置HTTPS传输协议
Nginx高可用解决方案LVS+KeepAlived
一、全链路高可用之Nginx基础架构问题分析
1、讲解Nginx单点问题剖析
故障分析:DNS轮询多个IP,假如Nginx挂了,就会导致所有请求都会报错。
DNS(Domain Name System)是一种用于将域名解析为IP地址的系统。当客户端发送请求时,Nginx会根据配置的代理规则将请求转发到指定的后端服务器。在这个过程中,Nginx需要将目标服务器的域名解析为对应的IP地址,以便正确地转发请求。
2、Nginx集群架构(VIP)
LVS:LVS是一个基于Linux内核的负载均衡器,它可以将来自客户端的请求分发到后端的多个真实服务器。LVS提供了多种负载均衡算法,如轮询、加权轮询、最少连接等。
KeepAlived:keepalived是一个开源工具,用于实现虚拟IP和故障转移。它可以监控服务器的状态,并在主服务器发生故障时自动将虚拟IP迁移到备份服务器上,以确保服务的连续性。
结合LVS和keepalived,可以实现以下虚拟IP的工作原理:
- 配置虚拟IP:在LVS负载均衡器和备份服务器上,通过keepalived配置虚拟IP。这个虚拟IP将作为负载均衡器的入口地址。
- 监控服务器状态:keepalived会定期检测主服务器的状态。如果主服务器正常运行,keepalived将保持虚拟IP绑定到主服务器上。
- 故障转移:如果主服务器发生故障或不可用,keepalived会自动检测到,并将虚拟IP迁移到备份服务器上。这样,备份服务器将接管负载均衡器的角色,并继续处理客户端的请求。
- 负载均衡:LVS负载均衡器接收来自客户端的请求,并根据预定义的负载均衡算法将请求转发到后端的真实服务器。这些真实服务器可以是多个应用服务器,用于处理客户端请求。
通过使用LVS和keepalived,虚拟IP可以实现高可用性和负载均衡。当主服务器发生故障时,keepalived会自动将虚拟IP迁移到备份服务器上,确保服务的连续性。同时,LVS负责将请求转发到后端的真实服务器,以实现负载均衡和提高系统的性能。这种结合可以提供可靠的服务,并确保在故障发生时能够快速切换到备份服务器。
3、Nginx高可用解决方案(基础)
国际标准化组织(ISO)制定的⼀个⽤于计算机或通信系统间互联的标准体系。
从低到⾼分别是:物理层、数据链路层、⽹络层、传输层、会话层、表示层和应⽤层
**四层⼯作在OSI,**第四层 也就是传输层。**七层⼯作在最⾼层,**也就是应⽤层。
F5、LVS(四层负载 tcp)
⽤虚拟ip+port接收请求,再转发到对应的真实机器。
HAproxy、Nginx(七层负载)
⽤虚拟的url或主机名接收请求,再转向相应的处理服务器。
二、业界主流的高可用方案LVS讲解
什么是LVS:
官网:http://www.linuxvirtualserver.org/
LVS是Linux Virtual Server,Linux虚拟服务器,是⼀个虚拟的服务器集群系统。
项⽬是由章⽂嵩博⼠成⽴,是中国国内最早出现的⾃由软件项⽬之⼀。
Linux2.4 内核以后,LVS 已经是 Linux 标准内核的⼀部分软件负载解决的两个核⼼问题是:选谁、转发
提供了10多重调度算法:轮询、加权轮询、最小链接、目的地址散列、源地址散列等。
三种负载均衡转发技术:
NAT:数据进出都通过 LVS, 前端的Master既要处理客户端发起的请求,⼜要处理后台RealServer的响应信息,将RealServer响应的信息再转发给客户端, 容易成为整个集群系统性能的瓶颈; (⽀持任意系统且可以实现端⼝映射)
DR: 移花接⽊,最⾼效的负载均衡规则,前端的Master只处理客户端的请求,将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Master, 性能要优于LVS-NAT; 需要LVS和RS集群绑定同⼀个VIP(⽀持多数系统,不可以实现端⼝映射)
TUNL:隧道技术,前端的Master只处理客户端的请求,将请求转发给RealServer,然后由后台的RealServer直接响应客户端,不再经过Master;(⽀持少数系统,不可以实现端⼝映射))
三、业界主流的高可用方案keepalived讲解
1、什么是KeepAlived
核心:监控并管理 LVS 集群系统中各个服务节点的状态
keepalived是⼀个类似于交换机制的软件,核⼼作⽤是检测服务器的状态,如果有⼀台web服务器⼯作出现故障,Keepalived将检测到并将有故障的服务器从系统中剔除,使⽤其他服务器代替该服务器的⼯作,当服务器⼯作正常后Keepalived⾃动将服务器加⼊到服务器群中,这些⼯作全部⾃动完成。
后来加⼊了vrrp(虚拟路由器冗余协议),除了为lvs提供⾼可⽤还可以为其他服务器⽐如Mysql、Haproxy等软件提供⾼可⽤⽅案
安装
yum install -y keepalived
# 路径
cd /etc/keepalived
启动和查看命令
# 启动
service keepalived start
# 停⽌
service keepalived stop
# 查看状态
service keepalived status
# 重启
service keepalived restart
# 停⽌防⽕墙
systemctl stop firewalld.service
依赖
注意: 如果有缺少依赖可以执⾏下⾯的命令
yum install -y gcc
yum install -y openssl-devel
yum install -y libnl libnl-devel
yum install -y libnfnetlink-devel
yum install -y net-tools
yum install -y vim wget
四、Keepalived核心配置讲解
# 目录
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
# 全局定义部分,包含一些全局配置参数,如邮件通知地址、SMTP服务器等。
global_defs {
# 指定了需要接收通知的邮件地址列表
notification_email {
# 通知将发送到acassen@firewall.loc、failover@firewall.loc和sysadmin@firewall.loc这三个地址。
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 指定了发送通知的邮件地址。在这个示例中,通知将使用Alexandre.Cassen@firewall.loc作为发件人地址。
notification_email_from Alexandre.Cassen@firewall.loc
# 指定了SMTP服务器的IP地址或主机名。在这个示例中,SMTP服务器的地址是192.168.200.1。
smtp_server 192.168.200.1
# 指定了与SMTP服务器建立连接的超时时间,单位是秒。在这个示例中,超时时间是30秒。
smtp_connect_timeout 30
# 指定了路由器的ID。在这个示例中,路由器的ID是LVS_DEVEL。
router_id LVS_DEVEL
# 设置为跳过检查广告地址。这个配置项告诉keepalived在检查广告地址时跳过一些检查。
vrrp_skip_check_adv_addr
# 设置为严格模式。这个配置项告诉keepalived在处理VRRP(虚拟路由冗余协议)时使用严格模式。
vrrp_strict
# 指定了GARP(Gratuitous ARP)间隔时间,单位是秒。在这个示例中,GARP间隔时间是0秒,表示禁用GARP。
vrrp_garp_interval 0
# 指定了GNA(Gratuitous Neighbor Advertisement)间隔时间,单位是秒。在这个示例中,GNA间隔时间是0秒,表示禁用GNA。
vrrp_gna_interval 0
}
# 这部分配置是用于定义一个VRRP实例(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)。
# 定义了一个名为VI_1的VRRP实例。
vrrp_instance VI_1 {
# 指定了该VRRP实例的状态为MASTER,表示该实例将作为主节点。
state MASTER
# 指定了该VRRP实例使用的网络接口为eth0。
interface eth0
# 指定了该VRRP实例的虚拟路由器ID为51。这个ID用于区分不同的VRRP实例。
virtual_router_id 51
# 指定了该VRRP实例的优先级为100。在同一个VRRP组中,优先级高的节点将成为主节点。
priority 100
# 指定了该VRRP实例的广告间隔时间,单位是秒。在这个示例中,广告间隔时间为1秒,表示每秒发送一次VRRP广告。
advert_int 1
# 指定了VRRP实例的身份验证配置。
authentication {
# 指定了身份验证类型为PASS,表示使用密码进行身份验证。
auth_type PASS
# 指定了身份验证密码为1111。
auth_pass 1111
}
# 指定了该VRRP实例的虚拟IP地址列表。在这个示例中,该VRRP实例将使用三个虚拟IP地址:192.168.200.16、192.168.200.17和192.168.200.18。
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
# 这部分配置是用于定义一个虚拟服务器(virtual server)和一个真实服务器(real server)。
# 定义了一个虚拟服务器,该服务器监听IP地址为192.168.200.100,端口为443。
virtual_server 192.168.200.100 443 {
# 指定了在轮询算法中的延迟循环次数。在这个示例中,延迟循环次数为6。
delay_loop 6
# 指定了负载均衡算法为轮询(round-robin)。这意味着请求将按照顺序依次分发给真实服务器。
lb_algo rr
# 指定了负载均衡的类型为NAT(Network Address Translation)。这表示虚拟服务器将使用NAT技术将请求转发给真实服务器。
lb_kind NAT
# 指定了持久化超时时间,单位是秒。在这个示例中,持久化超时时间为50秒,表示在此时间内,客户端的请求将被发送到同一个真实服务器。
persistence_timeout 50
# 指定了虚拟服务器使用的协议为TCP。
protocol TCP
# 定义了一个真实服务器,该服务器的IP地址为192.168.201.100,端口为443。
real_server 192.168.201.100 443 {
# 指定了真实服务器的权重为1。在负载均衡中,权重用于决定请求被分发给各个真实服务器的比例。
weight 1
# 指定了在进行SSL握手之前发送的GET请求的配置。
SSL_GET {
# 指定了GET请求的URL路径和摘要。
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
# 指定了连接超时时间,单位是秒。在这个示例中,连接超时时间为3秒。
connect_timeout 3
# 指定了在连接失败后重试的次数。在这个示例中,重试次数为3次
nb_get_retry 3
# 指定了在重试之前的延迟时间,单位是秒。在这个示例中,延迟时间为3秒。
delay_before_retry 3
}
}
}
# 这段代码是一个负载均衡配置的示例,用于将来自虚拟服务器(10.10.10.2:1358)的请求转发到两个真实服务器(192.168.200.2:1358和192.168.200.3:1358)。
virtual_server 10.10.10.2 1358 {
# 设置延迟循环的时间为6秒。这是指在负载均衡算法中,每个请求到达后等待的时间,以便在真实服务器之间进行均衡分发。
delay_loop 6
# 设置负载均衡算法为轮询(Round Robin),即按照顺序将请求分发给每个真实服务器。
lb_algo rr
# 设置负载均衡的类型为NAT(Network Address Translation),即通过修改请求和响应的IP地址和端口来实现负载均衡。
lb_kind NAT
# 设置持久化超时时间为50秒。这是指在持久化会话中,如果在指定时间内没有新的请求到达,则会话将被终止。
persistence_timeout 50
# 设置协议为TCP,表示负载均衡器将使用TCP协议来转发请求。
protocol TCP
# 设置一个备用服务器(sorry server),当所有真实服务器都不可用时,请求将被转发到该服务器。
sorry_server 192.168.200.200 1358
# 定义第一个真实服务器的配置。
real_server 192.168.200.2 1358 {
# 设置权重为1,表示在负载均衡中,该服务器将获得相等的请求分发比例。
weight 1
# 指定使用HTTP GET方法来检查真实服务器的可用性。
HTTP_GET {
# 定义了三个URL路径和对应的摘要
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
# 设置连接超时时间为3秒,即在3秒内如果无法建立连接,则认为该服务器不可用。
connect_timeout 3
# 设置在连接失败后的重试次数为3次。
nb_get_retry 3
# 设置在重试之前的延迟时间为3秒。
delay_before_retry 3
}
}
# 定义第二个真实服务器的配置,与第一个真实服务器(192.168.200.2 1358)的配置类似。
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# 这段代码是一个负载均衡配置的示例,用于将来自虚拟服务器(10.10.10.3:1358)的请求转发到两个真实服务器(192.168.200.4:1358和192.168.200.5:1358)。
virtual_server 10.10.10.3 1358 {
# 设置延迟循环的时间为3秒。这是指在负载均衡算法中,每个请求到达后等待的时间,以便在真实服务器之间进行均衡分发。
delay_loop 6
# 设置负载均衡算法为轮询(Round Robin),即按照顺序将请求分发给每个真实服务器。
lb_algo rr
# 设置负载均衡的类型为NAT(Network Address Translation),即通过修改请求和响应的IP地址和端口来实现负载均衡。
lb_kind NAT
# 设置持久化超时时间为50秒。这是指在持久化会话中,如果在指定时间内没有新的请求到达,则会话将被终止。
persistence_timeout 50
# 设置协议为TCP,表示负载均衡器将使用TCP协议来转发请求。
protocol TCP
# 定义第一个真实服务器的配置
real_server 192.168.200.4 1358 {
# 设置权重为1,表示在负载均衡中,该服务器将获得相等的请求分发比例。
weight 1
# 指定使用HTTP GET方法来检查真实服务器的可用性。
HTTP_GET {
# 定义了三个URL路径和对应的摘要
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
# 设置连接超时时间为3秒,即在3秒内如果无法建立连接,则认为该服务器不可用。
connect_timeout 3
# 设置在连接失败后的重试次数为3次。
nb_get_retry 3
# 设置在重试之前的延迟时间为3秒。
delay_before_retry 3
}
}
# 定义第二个真实服务器的配置,与第一个真实服务器(192.168.200.4 1358)的配置类似。
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
注:这个是keepalived提供的示例代码,可根据实际情况进行调整。有些配置也可以忽略。
五、HaVip结合keepalived实现主备双机高可用
1、Nginx高可用方案相关环境准备
高可用虚拟IP
弹性公网IP
云服务器ECS
清单 | 公网IP | 内网IP |
---|---|---|
ECS云服务器1 | 101.200.136.123 | 172.29.253.166 |
ECS云服务器2 | 59.110.68.26 | 172.29.253.164 |
HaVIP(高可用虚拟IP) | 172.29.253.165 | |
EIP(弹性公网IP) | 47.93.61.143 |
注:
1.高可用虚拟IP需要申请
2.两个云服务内网IP一定要是同一个网段,我的是172.16.0.0/12网段
2、云服务环境搭建:
# OpenResty安装 官网:https://openresty.org/en/linux-packages.html#centos
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
# update the yum index:
sudo yum check-update
sudo yum install openresty
# 安装命令⾏⼯具
sudo yum install openresty-resty
# 列出所有 openresty 仓库⾥的软件包
sudo yum --disablerepo="*" --enablerepo="openresty" list available
#查看版本
openresty -v
# 启动Nginx
cd /usr/local/openresty/nginx/sbin/
./nginx
# 访问是否成功
http://101.200.136.123/
# keepalived 安装
yum install -y keepalived
# 路径
cd /etc/keepalived
# 启动
service keepalived start
# 停⽌
service keepalived stop
# 查看状态
service keepalived status
# 重启
service keepalived restart
3、修改keepalive配置文件
主(Master)配置:
! Configuration File for keepalived
global_defs {
# 设置lvs的id,在一个网络内应该是唯一的
router_id LVS_DEVEL
#允许执行外部脚本
enable_script_security
}
# 配置vrrp_script,用于定义一个VRRP(Virtual Router Redundancy Protocol)脚本,用于检查真实服务器的可用性。主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
# 健康检查脚本,当脚本返回值不为0时认为失败
script "/etc/keepalived/conf/chk_server.sh"
# 检查频率,以下配置每2秒检查1次
interval 2
# 当检查失败后,将 vrrp_instance 的 priority 减小5
weight -5
# 连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
# 连续监测2次成功,就认为成功。但不调整优先级
rise 2
# 脚本将以root用户的身份运行
user root
}
# 配置对外提供服务的VIP(虚拟IP) vrrp_instance配置
vrrp_instance VI_1 {
# 指定vrrp_instance的状态,是MASTER还是BACKUP主要还是看优先级。
state MASTER
# 指定vrrp_instance绑定的网卡,最终通过指定的网卡绑定VIP。(查看CentOS系统网卡命令:ip addr show)
interface eth0
#相当于 VRID,用于在一个网内区分组播,需要组播域内内唯一。
virtual_router_id 51
#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
priority 100
#心跳间隔检查,默认为1s,MASTER会每隔1秒发送一个报文告知组内其他机器自己还活着。
advert_int 1
# 指定了VRRP实例的身份验证配置。
authentication {
# 指定了身份验证类型为PASS,表示使用密码进行身份验证。
auth_type PASS
# 指定了身份验证密码为1111。
auth_pass 1111
}
unicast_src_ip 172.29.253.164 #设置ECS实例的私网IP地址,本示例配置为192.168.0.209
unicast_peer {
172.29.253.166 #对端ECS实例的私网IP地址,本示例配置为192.168.0.210
}
# 定义虚拟IP(VIP)为123.57.36.233,可多设,每行一个
virtual_ipaddress {
172.29.253.165
}
# 本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
track_script {
chk_real_server
}
}
chk_server.sh
注:如果Nginx挂调了,则需要终止掉keepalived进程,这才才能实现IP漂移技术
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" -eq "0" ]; then
service keepalived stop
echo 'nginx server is died.......'
fi
配置完成后重启:
# 重启
service keepalived restart
# 查看状态
service keepalived status
# 如果查看状态时发现 日志报 WARNING - script '/etc/keepalived/conf/chk_server.sh' is not executable for uid:gid 0:0 - disabling. 脚本文件的权限设置不正确,导致无法被执行。UID和GID为0:0表示该文件的所有者和所属组为root用户和root组。
# 确保脚本文件的权限正确设置为可执行。你可以使用以下命令更改文件权限:
sudo chmod +x /etc/keepalived/conf/chk_server.sh # 执行完后需要重启
备(Backup)配置:
跟Master几乎一样,只改VI_1.state、VI_1.priority、unicast_src_ip、unicast_peer这四处就行。
! Configuration File for keepalived
global_defs {
# 设置lvs的id,在一个网络内应该是唯一的
router_id LVS_DEVEL
#允许执行外部脚本
enable_script_security
}
# 配置vrrp_script,用于定义一个VRRP(Virtual Router Redundancy Protocol)脚本,用于检查真实服务器的可用性。主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
# 健康检查脚本,当脚本返回值不为0时认为失败
script "/etc/keepalived/conf/chk_server.sh"
# 检查频率,以下配置每2秒检查1次
interval 2
# 当检查失败后,将 vrrp_instance 的 priority 减小5
weight -5
# 连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
# 连续监测2次成功,就认为成功。但不调整优先级
rise 2
# 脚本将以root用户的身份运行
user root
}
# 配置对外提供服务的VIP(虚拟IP) vrrp_instance配置
vrrp_instance VI_1 {
# 指定vrrp_instance的状态,是MASTER还是BACKUP主要还是看优先级。
state BACKUP
# 指定vrrp_instance绑定的网卡,最终通过指定的网卡绑定VIP。(查看CentOS系统网卡命令:ip addr show)
interface eth0
#相当于 VRID,用于在一个网内区分组播,需要组播域内内唯一。
virtual_router_id 51
#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
priority 10
#心跳间隔检查,默认为1s,MASTER会每隔1秒发送一个报文告知组内其他机器自己还活着。
advert_int 1
# 指定了VRRP实例的身份验证配置。
authentication {
# 指定了身份验证类型为PASS,表示使用密码进行身份验证。
auth_type PASS
# 指定了身份验证密码为1111。
auth_pass 1111
}
unicast_src_ip 172.29.253.166 #设置ECS实例的私网IP地址,本示例配置为192.168.0.209
unicast_peer {
172.29.253.164 #对端ECS实例的私网IP地址,本示例配置为192.168.0.210
}
# 定义虚拟IP(VIP)为123.57.36.233,可多设,每行一个
virtual_ipaddress {
172.29.253.165
}
# 本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
track_script {
chk_real_server
}
}
chk_server.sh
注:如果Nginx挂调了,则需要终止掉keepalived进程,这才才能实现IP漂移技术
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" -eq "0" ]; then
service keepalived stop
echo 'nginx server is died.......'
fi
配置完成后重启:
# 重启
service keepalived restart
# 查看状态
service keepalived status
# 如果查看状态时发现 日志报 WARNING - script '/etc/keepalived/conf/chk_server.sh' is not executable for uid:gid 0:0 - disabling. 脚本文件的权限设置不正确,导致无法被执行。UID和GID为0:0表示该文件的所有者和所属组为root用户和root组。
# 确保脚本文件的权限正确设置为可执行。你可以使用以下命令更改文件权限:
sudo chmod +x /etc/keepalived/conf/chk_server.sh # 执行完后需要重启
检测配置是否成功
4、绑定资源
请求弹性公网IP(EIP)
5、测试
我停止http://59.110.68.26/ 下的Nginx进程,再次访问http://47.93.61.143/
如果页面提示Welcome to OpenResty! Backup 2 这表示配置成功!
事实证明,没这么简单。访问失败了。。。
# 一步一步排查
# 首选确保脚本文件的权限正确设置为可执行。
cd /etc/keepalived/conf
ll
-rwxr-xr-x 1 root root 188 7月 30 00:38 chk_server.sh
# 如果不是 rw-r--r--x root 需要执行这个命令
sudo chmod +x /etc/keepalived/conf/chk_server.sh
# 其次 查看 getenforce 如果是 Disabled 需要执行 getenforce 0
getenforce # 查看
setenforce 0 # 关闭
# 如果还没解决,大概率是脚本问题 尝试执行下.sh脚本,看下报什么错
./chk_server.sh
这些问题都解决后,再次访问http://47.93.61.143/