使用nginxWebUI配置Web网站与端口转发​
  2KIwc9ThUaFN 2023年11月19日 39 0

使用nginxWebUI配置Web网站与端口转发

石家庄 王春海 刘春福

最近我们公司托管了5台服务器到IDC机房,其中4台服务器组成VMware虚拟化集群,为我公司提供50台左右生产环境的虚拟机并对外提供服务,另1台服务器用于备份。IDC机房提供15个公网的IP地址。其中1个公网的IP地址配置在硬件防火墙(或路由器)上,使用端口映射方式,将这5台服务器主机IP地址与底层iDRAC的远程管理进行转发,实现了服务器的远程管理。而我公司50台虚拟机,部分虚拟机直接配置公网IP地址对外提供服务,剩余的一部分虚拟机,配置了一台RHEL 8.6的虚拟机,使用nginx的反向代理功能进行转发,使用iptables实现共享上网功能。拓扑如图1所示。

使用nginxWebUI配置Web网站与端口转发​_nginx


图1 使用nginx代理转发

通常情况下,每台虚拟机对外提供一个应用,每台虚拟机需要映射2个端口。1个端口用于业务端口(例如网站),另1个端口用于远程管理(对于Windows服务器映射TCP的3389端口,对于Linux服务器映射TCP的22端口)。图1标出了部分使用内网IP地址的虚拟机,我们以此为例进行介绍,示例Web网站转发与端口映射如表1所列。

表1 Web网站与端口转发列表

序号

监听域名

监听端口

内网地址

内网端口

用途

1

www.yinet.online

80

192.168.6.100

80

网站

2

30100

192.168.6.100

3839

远程管理

3

www.chunhai.wang

443

192.168.6.101

443

网站

4

20101

192.168.6.101

22

远程管理

5

oa.chunhai.wang

80

192.168.6.103

80

网站

6

30103

192.168.6.103

3389

远程管理

7

8011

192.168.6.103

8011

测试网站


使用nginx转发Web网站与端口需要编写配置文件,但这对于部分熟悉Windows图形界面的管理员来说有一定的难度。所以,为了减轻网管的负担,我们使用了一款图形化的管理nginx的配置工具—neinxWebUI

nginxWebUI可以使用网页来快速配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, 静态html服务器, ssl证书自动申请、续签、配置等, 配置好后可一建生成nginx.conf文件, 同时可控制nginx使用此文件进行启动与重载, 完成对nginx的图形化控制闭环

nginx本身功能复杂, nginxWebUI并不能涵盖nginx所有功能, 但能覆盖nginx日常90%的功能使用配置, 平台没有涵盖到的nginx配置项, 可以使用自定义参数模板, 在conf文件中生成配置独特的参数。

下面我们介绍安装配置过程。

1 准备RHEL的代理虚拟机与安装nginx

在本项目中,我们创建1台4个vCPU、4GB内存和300GB硬盘,配置了2个网卡的虚拟机,安装Red Hat Enterprise Linux 8.6版本。虚拟机配置如图所示。

安装RHEL操作系统之后,使用root账户登录,为RHEL虚拟机的2个网卡设置IP地址,其中1个网卡设置为公网IP地址(当前示例为61.x1.x2.x3),并配置子网掩码、网关和DNS。另1个网卡设置为内网IP地址(规划为192.168.6.253),设置子网掩码,不设置网关和DNS。该虚拟机通过设置公网IP地址的网卡访问Internet。

在安装好RHEL 8.6上之后,安装nginx,步骤如下。

1)为nginx设置 yum 存储库,创建


vim /etc/yum.repos.d/nginx.repo


[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true


[nginx-mainline]

name=nginx mainline repo

baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/

gpgcheck=1

enabled=0

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

2)执行sudo yum install nginx安装nginx。当前安装的nginx版本为nginx-1:1.22.1-1.el8.ngx.x86_64

2 安装nginxWebUI

nginxWebUI需要JAVA JDK,在本示例中,将在RHEL6.8安装JDK1.7,采用rpm包的方式安装。

(1)从oracle官网(https://www.oracle.com/java/technologies/downloads/#jdk17-linux下载

(2)使用rpm命令安装JDK,命令如下。

rpm -ivh /tmp/jdk-17_linux-x64_bin.rpm

(3)从nginxWebUI 官网(https://www.nginxwebui.cn/)下载最新版本,当前版本号为3.4.6RHEL虚拟机中,在/home目录中创建名称为neinxWebUI的目录,然后将nginxWebUI-3.4.6.jar下载保存到/home/nginxWebUI/目录中,保存文件名称为nginxWebUI.jar,命令如下。

mkdir /home/nginxWebUI/

wget -O /home/nginxWebUI/nginxWebUI.jar http://file.nginxwebui.cn/nginxWebUI-3.4.6.jar

(4)将nginxWebUI设置为开机自启动,创建/etc/systemd/system/nginxwebui.service文件。

vim /etc/systemd/system/nginxwebui.service

cat /etc/systemd/system/nginxwebui.service

内容如下:

[Unit]

Descriptinotallow=NginxWebUI

After=syslog.target

After=network.target


[Service]

Type=simple

User=root

Group=root

WorkingDirectory=/home/nginxWebUI

ExecStart=/usr/bin/java -jar /home/nginxWebUI/nginxWebUI.jar

Restart=always


[Install]

WantedBy=multi-user.target

(5)然后执行如下命令,启用nginxwebui服务。

systemctl daemon-reload

systemctl enable nginxwebui.service

systemctl start nginxwebui.service


3 配置防火墙

nginxWebUI的管理界面默认需要TCP的8080的端口。如果用nginx转发Web网站,一般需要TCP的80和443端口。需要在Linux的防火墙上开放这些端口。

(1)在RHEL虚拟机中,执行如下命令关闭SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

(2)在防火墙中开放TCP的8080、443、80端口,命令如下。

firewall-cmd --permanent --add-port 8080/tcp --add-port 443/tcp --add-port 80/tcp

如果要远程管理服务器,需要其他端口时,例如,对于nginx后端的Windows服务器,如果使用远程桌面进行管理,如果要使用默认的3389端口,可以执行如下命令。

firewall-cmd --permanent --add-port 3389/tcp

如果使用非默认端口,例如使用30001,可以执行如下命令。

firewall-cmd --permanent --add-port 30001/tcp

(2)在防火墙添加了开放端口外,执行如下命令重新加载防火墙。

firewall-cmd --reload

(3)如果要查看防火墙开放的端口,执行如下命令。

firewall-cmd --list-all


4 使用nginxWebUI

在浏览器中登录nginxWebUI的管理界面,默认管理端口为8080

使用chrome浏览器登录nginxWebUI的管理界面,在当前的示例中,安装nginx的虚拟机的公网IP地址为61.x1.x2.x3,内网IP地址为192.168.6.253,在互联网上可以使用http://61.x1.x2.x3:8080登录,在局域网中可以使用http://192.168.6.253:8080登录。在第一次登录时,需要设置登录用户名和密码,密码要求至少8位,包括大小写字母和数据。设置管理员账户和密码后登录。下面通过具体实例介绍nginxWebUI的使用。

登录nginxWebUI后的主界面如图所示。在“http参数配置”中,可以通过单击“添加http参数配置”,添加nginx的配置参数。也可以通过单击“简易配置向导”添加修改配置参数。配置之后单击“预览”查看nginx的http配置文件。如图1所示。

使用nginxWebUI配置Web网站与端口转发​_服务器托管_02


图1 配置http参数

nginx的功能主要是转发http(包括https)网站、TCP与UDP的端口映射。如果转发http的网站,在“反向代理(Server)”中,单击“添加反向代理”链接,弹出“编辑反向代理”对话框,在此对话框中,转发类型下拉列表中有http和TCP/UDP。如果要转发http或https网站选择http,如果做端口映射选择TCP/UDP。我们通过前文规划的“表1 Web网站与端口转发列表”为例进行介绍。

(1)如果要转发http网站(默认使用TCP协议、端口为80),例如表1中序号为1的网站,网站对外域名为www.yinet.online,网站保存在IP地址为192.168.6.100的虚拟机中,网站端口为80。在nginxWebUI中选择“添加反向代理”,转发类型选择http,监听ip端口中,IP地址添加nginx防火墙的外网IP地址,当前示例为61.x1.x2.x3(www.yinet.online的域名也要解析为61.x1.x2.x3这个IP地址),端口为80。监听域名为www.yinet.online。单击“添加代理目标”,代理类型选择“动态http”,代理目标为http://192.168.6.100。设置之后单击“提交”按钮。如图2所示。

使用nginxWebUI配置Web网站与端口转发​_nginx_03


图2 转发http网站

(2)如果要转发https网站,例如表1中序号为3的名称为https://www.chunhai.wang的网站。并且要实现访问http://www.chunhai.wang的时候自动跳转到https://www.chunhai.wang的站点。需要先为www.chunhai.wang申请nginx格式证书,并导出nginx格式的证书,证书包括2个文件,一个文件扩展名为.key文件,另一个文件扩展名为.pem文件,将这2个文件使用sftp上传到nginx虚拟机的一个目录中(不能上传到/tmp目录中),本示例将www.chunhai.wang的证书上传到/cafile的文件夹中。然后在nginxWebUI中添加反向代理,转发类型为http,监听ip地址为61.x1.x2.x3(www.chunhai.wang的IP地址解析为61.x1.x2.x3),端口为443,监听域名为www.chunhai.wang。开启ssl选择是。在“pem文件路径”与“key文件路径”右侧单击“选择已有文件”,选择上传的www.chunhai.wang的证书文件。开启http2可以根据需要选择是或否。ssl协议版本根据需要选择,现在一般选择TLS v1.2和TLS v1.3。在http跳转https选择是,从该端口跳转地址设置为61.x1.x2.x3,端口为80。单击“添加代理目标”,添加放置www.chunhai.wang网站的内部服务器的IP地址及服务端口,当前示例为http://192.168.6.101。配置之后单击“提交”按钮,如图3所示。


使用nginxWebUI配置Web网站与端口转发​_服务器托管_04


图3 转发https网站

(3)如果要为内部的服务器提供端口映射,需要两步完成。例如以表1中序号为2的服务器为例进行介绍。首先在“负载均衡(upstream)”中单击“添加负载均衡”链接,在“添加负载均衡”对话框中,在转发类型下拉列表选择TCP/UDP,名称(示例)为192.168.6.100-3389,单击“添加负载”链接,ip为192.168.6.100,端口为3389。设置之后单击“提交”,如图4所示。

使用nginxWebUI配置Web网站与端口转发​_nginx_05


图4 添加负载均衡

添加负载均衡之后,然后添加反向代理。在“添加反向代理”对话框中,转发类型选择TCP/UDP,监听端口输入nginx外网IP地址(当前示例为61.x1.x2.x3),端口为30100(根据表1规划),指向负载均衡下拉列表选择192.168.6.100-3389,设置之后单击“提交”按钮。如图5所示。

使用nginxWebUI配置Web网站与端口转发​_nginx_06


图5 添加反向代理

表1中其他网站与服务器的端口映射请参照上面内容进行配置。配置之后反向代理内容如图6所示。

使用nginxWebUI配置Web网站与端口转发​_服务器托管_07


图6 反向代理

(4)当前使用nginxWebUI配置还没有在nginx中生效。如果要将使用nginxWebUI配置的内容保存到nginx配置文件中并生效。在“启用配置”中,先单击“检验文件”链接,检查配置是否正确,检验通过之后,单击“替换文件”链接,然后单击“重新装载”,nginx配置生效。如图7所示。

使用nginxWebUI配置Web网站与端口转发​_nginx_08


图7 启用配置

【说明】启用配置左侧窗口为当前使用nginxWebUI图形生成的配置文件,右侧是nginx的配置文件。如果配置有问题还可以单击“还原文件”,打开“还原文件”对话框。nginxWebUI会将每次配置都保存下来,可以根据需要进行还原。

5 在RHEL 8.6安装配置iptables

现在可以将内网的虚拟机使用nginx转发到互联网了,但是此时内网的虚拟机还不能访问Internet。如果要实现这个功能,需要在nginx的虚拟机配置iptables。在RHEL 8.6中带的是iptables 1.8.4版本,默认并没有安装,需要管理员手动安装并配置。

(1)执行如下命令,停止firewalld

systemctl stop firewalld

(2)执行如下命令,开机禁用firewalld

systemctl disable firewalld

(3)为虚拟机加载RHEL 8.6的安装ISO文件,安装iptables。命令如下。

mnt /dev/cdrom /mnt/cdrom

cd /mnt/cdrom

cd BaseOS/Packages/

rpm -Uvh iptables-services-1.8.4-22.el8.x86_64.rpm

(4)执行如下命令查询是否安装成功

rpm -qa | grep iptables

(5)执行如下命令启动iptables,并将iptables配置为开机自启动。

systemctl start iptables.service

systemctl enable iptables.service

(6)执行如下命令,打开内核ip转发。使用vi编辑/etc/sysctl.conf ,修改以下内容。

net.ipv4.ip_forward = 1

保存退出,然后执行sysctl -p生效

(7)配置iptables,为192.168.6.0/24(局域网地址段)配置nat,转发使用外网IP地址61.x1.x2.x3

iptables -F

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o ens192 -j SNAT --to-source 61.x1.x2.x3

【说明】本示例将公网IP地址为61.x1.x2.x3代替。在实际的配置中,用你的公网IP地址代替。

(8)测试IP地址为192.168.6.0/24的虚拟机是否能访问Internet,生效之后保存配置

iptables-save > /etc/sysconfig/iptables

至此配置完成。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
2KIwc9ThUaFN