摘要:本文利用反向代理技术实现对一台配置相对较高的服务器内的各个虚拟机中的网站进行分别管理的解决方案。用到的工具包括:VMWeare workstation、nginx、windows Server2008 standard等。
应用场景:该应用场景来自于笔者本科时学院机房管理,当时学院服务器更新换代购买了一台配置相对较高的服务器,即将应用。但是,从前的服务器存在这样几点痹症:1.一台服务器中存在多种开发语言的网站,例如:jsp、asp.net、asp、php等,环境混乱;2.几乎所有的网站都是由老师或学生开发的,安全性较低,经常被攻击;3.没有专门的人来维护具体的网站。最终导致服务器经常被攻击,对正在运行的课程平台和学院网站造成很大的影响。所以最终想要这样来解决这件事情:把不同的网站分别放在不同的虚拟机里,由对应的老师自行管理。
因为当时即将毕业,所以这个问题一直到研一上学期才得以解决,就是利用反向代理(虽然反向代理一般都用来做负载均衡)。直到最近,教王XX同学学习网络技术方面的知识才又想起来这个案例,特意拿出来并且记录下来,分享。
反向代理
想要彻底了解反向代理的概念,还是要主动去搜索,可以搜索正向代理和反向代理的区别。可以参考:图解正向代理、反向代理、透明代理。
在此简述一下反向代理的概念:(抄的à)以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
比如下面的图 1反向代理拓扑结构。我们想要访问A网站或B网站,如果A、B的域名是:www.A.com、www.B.com 。我们将两个域名都解析至公网IP地址:222.191.XXX.XXX。这样当我们访问两个网站的时候外界看到的是访问的222.191.XXX.XXX,但实际的业务是由A、B两个站点分别完成的。
图1反向代理拓扑结构
图1的路由器其实在我们的案例中是一台物理计算机,它的IP地址是222.192.XXX.XXX。此处将其画成路由器的样子其实想表达意思是:将来自80端口的所有请求全部转发到192.168.174.128这台服务器上去,由它全权处理,我们又在这台服务器上安装了nginx反向代理服务,再对http请求进行分发。当时这样设计的目的是尽量减少物理主机被攻击的可能性,我们其实完全可以将反向代理服务器安装在物理机上的,而且可以节省一台虚拟机。但是笔者对网络安全一块的知识并不是特别了解,就想:万一nginx本身存在什么漏洞呢?就会伤害到物理机,而把代理服务放在虚拟机上,即使代理服务器被损坏了也对物理主机影响不大,无非是再重新开个代理服务器罢了。
所以,事实上如果我们将所有的设备全部作为实体的设备来看待的话,它的物理拓扑结构应该是 图 2物理拓扑图。
图2 物理结构拓扑图
整个HTTP请求处理的流程是这样的:用户发起一个HTTP请求,例如www.A.com,域名解析至222.192.XXX.XXX,然后路由器将来自80端口的所有报文全部转发至代理服务器,代理服务器根据域名决定将该请求交给哪一台web服务器。A站点处理完成将结果交还代理服务器,代理服务器再返回给客户端。