使用nginxWebUI配置Web网站与端口转发
石家庄 王春海 刘春福
最近我们公司托管了5台服务器到IDC机房,其中4台服务器组成VMware虚拟化集群,为我公司提供50台左右生产环境的虚拟机并对外提供服务,另1台服务器用于备份。IDC机房提供15个公网的IP地址。其中1个公网的IP地址配置在硬件防火墙(或路由器)上,使用端口映射方式,将这5台服务器主机IP地址与底层iDRAC的远程管理进行转发,实现了服务器的远程管理。而我公司50台虚拟机,部分虚拟机直接配置公网IP地址对外提供服务,剩余的一部分虚拟机,配置了一台RHEL 8.6的虚拟机,使用nginx的反向代理功能进行转发,使用iptables实现共享上网功能。拓扑如图1所示。
图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.6。在RHEL虚拟机中,在/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所示。
图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所示。
图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所示。
图3 转发https网站
(3)如果要为内部的服务器提供端口映射,需要两步完成。例如以表1中序号为2的服务器为例进行介绍。首先在“负载均衡(upstream)”中单击“添加负载均衡”链接,在“添加负载均衡”对话框中,在转发类型下拉列表选择TCP/UDP,名称(示例)为192.168.6.100-3389,单击“添加负载”链接,ip为192.168.6.100,端口为3389。设置之后单击“提交”,如图4所示。
图4 添加负载均衡
添加负载均衡之后,然后添加反向代理。在“添加反向代理”对话框中,转发类型选择TCP/UDP,监听端口输入nginx外网IP地址(当前示例为61.x1.x2.x3),端口为30100(根据表1规划),指向负载均衡下拉列表选择192.168.6.100-3389,设置之后单击“提交”按钮。如图5所示。
图5 添加反向代理
表1中其他网站与服务器的端口映射请参照上面内容进行配置。配置之后反向代理内容如图6所示。
图6 反向代理
(4)当前使用nginxWebUI配置还没有在nginx中生效。如果要将使用nginxWebUI配置的内容保存到nginx配置文件中并生效。在“启用配置”中,先单击“检验文件”链接,检查配置是否正确,检验通过之后,单击“替换文件”链接,然后单击“重新装载”,nginx配置生效。如图7所示。
图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
至此配置完成。
标签:Web,http,虚拟机,配置,端口,nginx,nginxWebUI From: https://blog.51cto.com/wangchunhai/8308055