企业级双活NGINX+图形化GUI管理搭建详细教程 nginx+keepalived+nginxwebui

炻繛 2024-08-04 14:33:03 阅读 88

文章目录

概要背景应用代理架构整体架构拓扑安装开始技术细节

概要

在目前互联网发展形势下,有非常多的业务需求要从互联网或者VPN之类的非安全区域来访问企业内部的业务生产系统。这给网络框架和网络安全提出了很大的挑战。这种需求相信每一位运维人员都遇到过,而且也深思过。

在这种需求下,怎么去构建一种生产环境下的安全有效的访问途径。本人作为有某三甲医院多年运维经验的工作人员,分享自己的一整套改造经验之谈。有需求的同学们可以借鉴,有高工看见了,也提提建议。

背景

先交代下背景:目前医院信息化作为互联网信息化的一部分,总感觉太保守,一来也是发展迟,发展快,二来是思想不够解放。导致现在信息孤岛严重,发展受限。

在这里插入图片描述

相信这张图是医院互联网应用下的普遍网络构架吧。对于网闸这种东西,我是深恶痛绝,太死板,业务限制太大。谁用谁知道

在这里插入图片描述

我的思路是这样的,所有非安全域的访问(互联网、VPN)只能访问应用代理服务器(可搭配),而应用代理服务器通过四层、七层代理方式访问真正的内网服务器(涵盖99%的业务访问流程)。 优势是代理配置更灵活、业务应用拓展更灵活。

应用代理架构

nginx+keepalived+nginxwebui 这三款软件可以自行百度下,都是主流稳定产品,具体不介绍了,都是神一样的存在。而且不用花钱的。。。

nginx:反向代理四层、七层应用。

keepalived:对nginx做双活避免宕机。

nginxwebui:图形界面管理nginx(更方便、更安全)。

整体架构拓扑

在这里插入图片描述

准备工作:

1、准备两台交换机,最好做个堆叠。

2、准备两台物理服务器(看你预算,生产环境中不建议单台)。安装centos或者openEuler操作系统,,,看你情况。

3、两台物理服务器网卡可以做个bond0做个。

思路

1、基础环境配置

2、编译安装nginx

3、安装nginx图形管理页面nginxwebui

4、配置双活keepalived

5、测试方法

6、升级须知

安装开始

1、基础环境配置 (两个节点配置相同)

① selinux关闭,yum阿里云网络源配置。

② 操作系统防火墙配置:

<code>[root@localhost ~]#firewall-cmd --zone=public --add-port=80/tcp --permanent

[root@localhost ~]#firewall-cmd --zone=public --add-port=443/tcp --permanent

[root@localhost ~]#firewall-cmd --zone=public --add-port=10240/tcp --permanent

[root@localhost ~]#firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

[root@localhost ~]#firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

[root@localhost ~]#firewall-cmd --reload

其中80、443端口是常用业务端口,10240是nginxwebui管理页面端口。后两条是因为keepalived使用vrrp协议实现主主,必须得放开。最后重新加载防火墙。。。。

提示:如果你有硬件防火墙,操作系统的防火墙也可以直接关闭。如下:

[root@localhost ~]#systemctl stop firewalld

[root@localhost ~]#systemctl disable firewalld

③yum安装列表:keepalived java-1.8.0-openjdk net-tools curl wget gcc gcc-c++ autoconf automake make openssl openssl-devel pcre pcre-devel zlib-devel 其中包括了keepalived、nginxwebui的环境java包、还有nginx及编译的包等。

可以一次性安装,也可以单个安装,例如

[root@localhost ~]#yum install -y keepalived

2、编译安装nginx(两个节点配置相同)

提示:这里强烈建议编译安装nginx,对于后期nginx的升级、增加模块等有重要作用

①下载nginx(最好选个最新的稳定版本,我这里以“1.22.1”做演示)

http://nginx.org/download

[root@localhost ~]#mkdir /usr/local/nginx #创建一个nginx安装目录

[root@localhost ~]#cp nginx-1.22.1.tar.gz /usr/local/nginx/ #将下载的tar包拷贝进去

[root@localhost ~]#cd /usr/local/nginx/

[root@localhost ~]#tar zxvf nginx-1.22.1.tar.gz #解压tar包

[root@localhost ~]#cd nginx-1.22.1

[root@localhost ~]#./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_secure_link_module --with-http_ssl_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module #先configure 后面跟着安装路径 --with-是需要的模块。。。。基础的模块都带上了,基本够用。

[root@localhost ~]#make & make install #编译及安装

------------------这就算装完了,可以在浏览器中输入http://IP 就能验证了。--------------

[root@localhost ~]#cd /usr/local/nginx/sbin/ #进入nginx安装目录

[root@localhost ~]#./nginx #启动nginx

[root@localhost ~]#./nginx -V #查看版本及模块及安装情况

-----------------下边为了便捷操作,将nginx服务安装到系统服务中去-----------------------

[root@localhost ~]#echo "export PATH=/usr/local/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh #增加环境变量,随处可使用nginx命令

[root@localhost ~]#source /etc/profile #加载环境变量,使之生效

[root@localhost ~]#vi /etc/init.d/nginx #这个nginx内容如下黑框,直接copy进去,不用改什么

[root@localhost ~]#chmod a+x /etc/init.d/nginx

↓↓↓↓↓↓↓↓↓↓↓↓↓下面的脚本就是上面nginx中的内容。为了展示方便,单独列举↓↓↓↓↓↓↓↓↓

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig: - 85 15

# description: NGINX is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /etc/sysconfig/nginx

# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"code>

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"code>

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

if [ -n "$user" ]; thencode>

if [ -z "`grep $user /etc/passwd`" ]; then

useradd -M -s /bin/nologin $user

fi

options=`$nginx -V 2>&1 | grep 'configure arguments:'`

for opt in $options; do

if [ `echo $opt | grep '.*-temp-path'` ]; then

value=`echo $opt | cut -d "=" -f 2`

if [ ! -d "$value" ]; then

# echo "creating" $value

mkdir -p $value && chown -R $user $value

fi

fi

done

fi

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $prog -HUP

retval=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

提示:nginx的安装就算正式结束了

测试内容:

systemctl start nginx.service 启动nginx

systemctl stop nginx.service 关闭nginx

systemctl status nginx.service 查看nginx状态

浏览器中输入http://IP 看能否打开。

3、安装nginx图形管理页面nginxwebui(两个节点配置相同)

本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置。

下载地址:https://www.nginxwebui.cn/ 并上传至服务器

基本功能可以在官网上查下,,,我觉得这是目前最好用的nginx配置工具。

nginxWebUI的环境依赖包是java-1.8.0-openjdk、net-tools是运行需要的组件,,,都已经安装了。

#mkdir /nginxWebUI #创建nginxwebui安装目录,安装很简单。我这里下载的是3.4.6版本

#cp nginxWebUI-3.4.6.jar /nginxWebUI/nginxWebUI.jar #复制并改名jar包

#cd /nginxWebUI

#vi start-service.sh #用于快捷启动nginxwebui

nohup java -jar -Dfile.encoding=UTF-8 /nginxWebUI/nginxWebUI.jar --server.port=10240 --project.home=/nginxWebUI/ > /dev/null &

#vi stop-service.sh #用于快捷关闭nginxwebui

pkill java

#vi /etc/rc.d/rc.local #编辑启动项,将nginxwebui加入开机启动

su - root -c '/nginxWebUI/start-service.sh'

#chmod a+x /etc/rc.d/rc.local #增加rc.local执行权限

好了可以登录了http://IP:10240 至于使用方法,其实也不难,看看就会。

在这里插入图片描述

基本使用从左侧反向代理开始,以发布一个https网站为例:

在这里插入图片描述

①至③略

④—如果没有证书就填80。如果有证书,就填443。即使你的网站是http的也没有关系。必填

⑤—填写域名。选填

⑥—如果没有证书就选否。如果有证书,就选是,并完成第⑦项。

⑧—添加代理目标,指的是正式web服务器的访问url。

⑨—动态http、代理目标(如果不是80或443,就得填端口号)格式如:http://192.168.0.1:8080

⑩—提交

如上就是添加一个需要nginx反向七层代理的网站,你还可以摸索下添加一个代理四层的站点,涉及“负载均衡(upstream)”、“反向代理(server)”。。。。。

在这里插入图片描述

如上操作完之后还是不能通过VIP的ip去访问的,因为你只是对nginxWebUI这个工具做了预配置,还没有实际应用到nginx中去。

进入启用配置→目标配置文件(按上文的路径去填)→对比(向你提供更改内容的对比页面,检查用的)→校验文件(检查nignx配置语法等有无错误,如有就得改错,直到显示ok和successful)→替换文件(将正确的配置替换到nginx中去)→重新装载(相当于加载nginx配置使其生效。等同命令nginx -s reload。 但不同于systemctl restart nginx哦)

这算是通过nginxWebUI完成了nginx的配置。你可以通过访问VIP的形式去访问反向代理的站点了。

4、配置双活keepalived(分别配置)

<code> 提示:本方案使用双活架构,keepalived正确安装及配置后,每台服务器除了一个本地ip外,还会生成一个虚拟IP地址简称VIP,这两个VIP承担外部访问的任务。使用中可以将不同业务分摊到这两个VIP上去,,,,我的做法是将四层“IP+端口”访问指向第一个VIP上去,将七层“http/https”访问指向第二个VIP上去,,,最终形成两个服务器分别承担一部分应用,达到一定程度的负载作用。在极端情况下,其中一台节点出现问题,它上面的VIP会漂移到正常运行的节点上去,达到nginx及业务可用,处理好故障节点后,VIP会自动回迁。

最开始安装环境时,keepalived已经安装,配置文件是/etc/keepalived/keepalived.conf 常用命令如下:

systemctl start keepalived.service #启动keepalived

systemctl stop keepalived.service #关闭keepalived

systemctl restart keepalived.service #重启keepalived

①首先添加个nginx检测脚本。用于keepalived检测nginx状态,如果nginx服务停了,会自动启动nginx,,如果nginx启动不了,就开始虚拟地址(VIP)漂移了,也就是常说的故障转移了。

#touch /etc/keepalived/check_nginx.sh #创建nginx检测脚本文件,键入如下内容,

#!/bin/bash

run=`ps -C nginx --no-header | wc -l`

if [ $run -eq 0 ]

then

systemctl stop nginx.service

systemctl start nginx.service

sleep 3

if [ `ps -C nginx --no-header | wc -l` ]

then

systemctl stop keepalived.service

fi

fi

#chmod a+x /etc/keepalived/check_nginx.sh #并更改文件的可执行权限

②配置keepalived

配置要素:state virtual_router_id auth_pass virtual_ipaddress track_script

根据最上面拓扑图中的IP,自行推理一下各个参数的用途,最简单的使用方法就是更改virtual_ipaddress中的IP地址就可以套用了。

node1配置如下:

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

vrrp_skip_check_adv_addr

# vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_nginx.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface ens192

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1024

}

virtual_ipaddress {

172.16.100.111

}

track_script {

chk_nginx

}

}

vrrp_instance VI_2 {

state BACKUP

interface ens192

virtual_router_id 52

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 4201

}

virtual_ipaddress {

172.16.100.112

}

track_script {

chk_nginx

}

}

node2配置如下:

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

vrrp_skip_check_adv_addr

# vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_nginx.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface ens192

virtual_router_id 51

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1024

}

virtual_ipaddress {

172.16.100.111

}

track_script {

chk_nginx

}

}

vrrp_instance VI_2 {

state MASTER

interface ens192

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 4201

}

virtual_ipaddress {

172.16.100.112

}

track_script {

chk_nginx

}

}

最后使用 systemctl start keepalived.service就可以启动了。

#systemctl start keepalived.service #启动

#systemctl enable keepalived.service #设置开机启动

做完以上部分,,,这个配置过程就算完了。

5、测试方法

如果这个搭建过程没有问题,就可以通过停止keepalived服务,去模拟节点故障。

举例:

停止节点1上的keepalived服务,那节点2上的IP地址就会有三个,172.16.100.102 172.16.100.112 172.16.100.111

恢复节点1上的keepalived服务,那节点2上的172.16.100.111就会回到节点1上。

更深层次的测试,可以自行再做做!

5、升级须知

一般需要升级的只有nginx 和 nginxwebui

nginx升级:

①、下载新编译版本nginx包nginx-1.99.99.tar.gz,解压至/usr/local/nginx/nginx-1.99.99并进入

②、./configure --prefix=/usr/local/nginx --XXXX (注意添加原有模块)

③、make 不要make install

④、mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old 备份nginx主文件并删除原nginx

⑤、cp /usr/local/nginx/nginx-1.99.99/objs/nginx /usr/local/nginx 将编译好的nginx移动到主目录

⑥、可用systemctl restart nginx.service重启加载新文件。或不用管也可以,nginx会自动完成平滑升级

nginxwebui升级:

①、关闭nginxWebUI主进程 pkill java 运行: ./nginxWebUI/stop-service.sh

②、下载新的nginxWebUI-3.99.99.jar 覆盖nginxWebUI.jar

③、启动nginxWebUI服务。 ./nginxWebUI/start-service.sh

技术细节

提示:nginxWebUI的使用自己琢磨,,,头快炸了,不说了

两台nginxWebUI中添加正向配置后,记得在“启用配置”菜单中-对比文件-校验文件-替换文件-重新装载,,最后在“远程服务器”中同步配置和批量运行,以保持两台nginx配置相同。要不然VIP漂移后有空配置



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。