1、使用 Windows Server 2008 R2 的单台服务器托管解决方案1 单服务器主机托管解决方案(Windows 2003+ISA+VMware Server)有一些单位在电信、网通或其他运营商的机房,放置了一台服务器进行托管,这些服务器一般会获得一个公网 IP,并且用“主机头名”的方法,放置多个网站或论坛。对于大部分人来说,如果只放一个网站,那么将服务器安装个 Windows Server 2003或 Linux,直接放网站就可以了。对于有些用户来说,需要放置多个网站,而这些网站中,有的是一些个人网站,有的是企业的网站。当网站的“来源 ”不一的时候,可能有的网站代码有“ 漏洞 ”,有
2、的可能在这样、那样的问题,这样,如果所有的网站还像以前一样,都放在同一个服务器中,就可能被黑客通过“跨站攻击” 的方式,修改同一服务器上的其他网站,甚至入侵整个系统。为了解决这个问题,我曾经提出过一个解决方案,主机安装 32 位 Windows Server 2003 企业版(最多可以支持 8GB 内存),在主机上安装 ISA Server 2006 标准版与VMware Server 1.x 版本,并在 VMware Server 中安装多个虚拟机。将网站分类,将不太重要的网站放在一个虚拟机中,将重新的网站单独放在别的虚拟机中,并且用 ISA Server发布 VMware Server 虚
3、拟机中的网站,这样达到了使用 1 台服务器、1 个公网地址而实现了需要多台托管服务器才能解决的问题,并且提高了网站的安全性。这个方案,在很长的一段时间内使用,证明是非常成功的。2 以前方案存在的问题但现在计算机的发展越来越快,而用户需要放置的网站越来越多,这时候就需要更多的虚拟机,并且需要虚拟机具有更高的性能。但使用 ISA Server 加 VMware Server 的方案,有个“ 先天不足”的地方就是,当时 ISA Server 只能安装在 32 位的 Windows Server 2003 中,而 32 位的 Windows Server 2003,最多只能使用 8GB 的内存,这是其
4、一;其二,VMware Server 虚拟机提供的性能,并不能让人满意(VMware ESX Server 提供的虚拟机性能是很好的)。在几年前,一个朋友的服务器(8GB 内存、1 个 4 核 CPU、5 块 320GB 硬盘做的RAID 5)托管在电信机房,使用的就是我提供的 Windows Server 2003+ISA Server+ VMware Server 的解决方案。随着这几年来服务器中网站的数量增加,网站访问量的增大,感觉到这种方案已经不适合现在的需求。3 Windows Server 2008+TMG2010+Hyper-V Server 不能共存当 Windows Serv
5、er 2008 发布的时候,其集成的 Hyper-V Server 虚拟机,经过测试,性能可以满足要求。同时 Windows Server 2008 可以支持更多的内存。但 ISA Server 2006 并不能在 Windows Server 2008 下运行,只能等 ISA Server 的下一个版本。虽然Windows Server 2008 早已发布,但 ISA Server 2006 的下一个版本 TMG2008 直到 2009年底才发布,发布时名称也改为了 TMG2010,这个产品必须要 64 位的硬件、Windows Server 2008 操作系统的支持。那这样好了,那是不是可
6、以借鉴 Windows Server 2003+ISA Server 2006+VMware Server 1.x 的经验呢?主机安装 Windows Server 2008 R2+TMG2010+Hyper-V Server,让 Hyper-V Server 实现虚拟机用 TMG2010 转发呢?想法是美好的,但现实是残酷的,经过我的实验,这个方法是完全行不通的。4 解决思路现在来看条件与需求:单台托管的高性能物理服务器,使用 Hyper-V 虚拟机实现多台服务器。需要让每台虚拟机对外提供服务并能让用户远程管理。要实现这个功能,简单来说,有两种方法:多 IP 地址方法与单 IP 地址方法。4
7、.1 多 IP 地址实现方法主机安装 Windows Server 2008 R2,并启用 Hyper-V Server 功能,创建多个虚拟机,每个虚拟使用一个公网的 IP 地址,每个用户可以使用“远程桌面”连接到其所在的虚拟机。这样可以保证每个虚拟机的独立性,而 Hyper-V Server 虚拟机的性能也足以满足需要。例如:托管的服务器有 1 块网卡,具有一个公网地址。使用 Hyper-V 可以创建多个虚拟机,每个虚拟机给一个或多个用户使用。而每个用户主要是在托管的服务器上提供网站服务。而在只有一个公网 IP 地址的前提下,“路由和远程访问服务”是不能将网站服务所需要的默认端口 TCP 的
8、 80 同时转发到多个不同的内网地址的。这时候,就需要借助域名服务中的 URL 转发功能。由于这个思路比较简单,所以不展开介绍。4.2 单 IP 地址端口法但是,IP 地址虽然 “不值钱”,托管服务器的人也 “不差钱”,但 IP 地址并不是想要多少就有多少的,所以,许多时候只能使用 1 个公网 IP 地址。要想使用 1 个公网地址,而又在此公网地址“ 之后”有多个虚拟机,每个虚拟机中又有多个网站,那必须需要一个类似 ISA Server(现在称作 TMG)的程序,进行“主机头名” 或者“TCP 端口” 转发,才能实现多网站。而 Windows Server 2003、Windows Serve
9、r 2008中的“ 路由与远程访问服务”是可以实现 TCP 端口的转发功能的。但是,虽然使用 1 个公网 IP+多 TCP 端口实现多个网站,但采用“端口法” 的网站,人们在访问的时候,还要键入相应的端口才能访问,例如 http:/:8001等,这样一来,不利于网站的推广,也不利于用户记住网站。对于这个问题,可以使用某些商业 DNS 的 URL 转发功能解决。例如,对于刚刚提到的网站http:/:8001,完全可以将对 站点的访问,通过 URL 转发功能,转发到 http:/:8001,目前许多 DNS 提供了这个功能。如果你的网站没有进行备案,目前许多 DNS 服务器是不允许使用 URL
10、转发的,这时候,就可以由 IIS 中的“网站重定向( HTTP 跳转)” 功能,将对 的访问转到 :8001 的网站。下面将介绍这个思路的实现的步骤。5 单公网 IP 地址、单 Windows Server 2008 托管服务器、多虚拟机解决方案Windows Server 2008 集成了 Hyper-V Server 与“路由和远程访问服务” ,借助于这两个服务,可以将托管在电信机房的一台服务器,当成多台服务器使用,并对外提供服务。关键点如下: 使用 Hyper-V Server 创建多个虚拟机,并让虚拟机使用 “虚拟网络” 使用“路由和远程访问服务”,采用“端口映射” 功能,将主机的(
11、外网)端口转发到需要的虚拟机中。5.1 案例描述A 企业,在电信机房托管 1 台服务器,获得公网地址一个,假设该地址为123.182.242.12;在这台服务器上,创建了两个虚拟机,分别给 B、C 两个用户使用。B 用户,获得的虚拟机的 IP 地址是 192.168.10.10。B 想要在这个虚拟机中配置三个网站 、 、www.a3.cc ;C 用户,获得的虚拟机的 IP 地址是 192.168.10.11。B 想要在这个虚拟机中配置 2 个网站 、。则 A 可以将 TCP 的 801813 等端口映射给 192.168.10.10 的虚拟机使用,还可以将 TCP 的 800 映射给 A 的“
12、 远程桌面” 所使用的 TCP 的 3389 端口,用于远程桌面管理。在实际分配中,还可以多映射一些端口,将来为用户 B 添加新网站使用,在本例中,映射了 TCP 的 800819 端口给虚拟机 B;将 TCP 的 820829 映射给 192.168.10.11 的虚拟机,然后再通过相应的 URL 转发功能,将这些网站的访问重定向到真正的网站地址。如下表所示。用户 网站 IP:端口 虚拟机 IP 外网端口 192.168.10.10: 192.168.10.10:802www.a3.cc 192.168.10.10:803VM1,192.168.10.10 801819用户 B远程管理 19
13、2.168.10.10:3389 192.168.10.11: 192.168.10.11:822VM2,192.168.10.11 821829用户 C远程管理 192.168.10.11:3389 820下面介绍实现的主要步骤。5.2 Hyper-V Server 处设置管理员 A 登录到托管的主机(安装的 Windows Server 2008 X64+Hyper-V Server),进入“Hyper-V 管理程序”,进行如下的操作:(1)在 Hyper-V 中添加名为“内部网络” 的虚拟网络,该虚拟网络的 “连接类型”为“仅内部” ,如图 1 所示。图 1 添加“仅内部 ”网络的虚拟
14、网卡添加之后,打开主机的“网络连接 ”,设置“内部网络” 虚拟网卡的 IP 为 192.168.10.1。(2)为 B、C 用户创建的两台虚拟机,分配虚拟网卡时,使用图 1 中添加的“内部网络”的虚拟网卡,如图 2 所示。图 2 为虚拟机分配内部网卡(3)进入 B 用户的虚拟机,设置 IP 地址为 192.168.10.10、网关地址为 192.168.10.1的 IP 地址,如图 3 所示。同样,对于 C 用户的虚拟机,设置 IP 地址为 192.168.10.11,网关地址为 192.168.10.1。图 3 为用户虚拟机设置 IP 地址、网关地址(4)在 Windows Server 2
15、008 主机上,添加“ 路由和远程访问服务”(如图 4 所示),此时主机外网 IP 是 123.182.242.12;内网 IP 地址是 192.168.10.1。图 4 添加“路由和远程访问服务”(5)参照表 1 的要求,映射 TCP 的 800819 到 192.168.10.10 的 IP 地址,映射TCP 的 820 829 到 192.168.10.11 的 IP 地址。在映射的时候,“传入端口”与“ 传出端口”可以一样,也可以不一样。这可以根据自己的爱好,或者规定好的设置。其中,“传入端口”指的是公网的 IP 地址所使用的端口,是对 Internet 用户所公布的、允许 Inter
16、net 用户访问的端口,在此就是表 1 所规划的 TCP 的 800819 ;而“传出端口”指映射到的“ 专用地址”中的服务端口。例如,将 TCP 的 800 映射到 192.168.10.10 的 3389 端口(如图 5 所示),对于 Internet 中的用户来说,可以通过使用“ 远程桌面连接程序” 连接“ 公网地址”与 800 端口,连接到 B 虚拟机的远程桌面。再举一例,假设将 TCP 的 801 映射到 192.168.10.10 的801,则可以在 B 的虚拟机中,创建 IIS 网站,该网站保存 的站点内容,该网站使用 TCP 的 801 端口,而不是使用 TCP 的 80 端
17、口。这样,Internet 的用户,可以通过访问 http:/ 123.182.242.12:801 访问 的内容。图 5 映射端口到指定的内网计算机5.3 用户 B 的操作用户 B,使用远程桌面,登录 123.182.242.12:800 到虚拟机中,添加 IIS 服务,创建三个网站,其中 网站使用 TCP 的 801 端口(如图 6 所示),使用 TCP 的 802 端口,www.a3.cc 网站使用 TCP 的 803 端口。这样就达到了创建多个网站的目的。图 6 使用 TCP 的 801 端口创建 的网站而用户 C 的操作与此类似:登录 123.182.242.12:820 到虚
18、拟机中,在 IIS 中,创建两个网站, 网站使用 TCP 的 821 端口, 使用 TCP 的 822 端口。5.4 远程测试登录到远程的一台服务器,或者让 Internet 的用户,在 IE 中浏览http:/123.182.242.12:801 打开 B 虚拟机中的 的网站,如图 7 所示。图 7 在外网打开虚拟机 B 的网站5.5 用户 DNS 管理处如果用户认为,http:/123.182.242.12:801 访问 不容易“记住”,则可以采用 DNS 提供的“URL 转发申请 ”功能,将用户对 的访问,转到http:/:801,这样比较符合大家的习惯。不同的域名服务商,提供的
19、URL 转发功能不太一样,但都是在其提供的“DNS 管理处”进行的设置,如图 8、图 9 所示,这是将对 的访问转发到http:/rms.heuet.org:8001。图 8 URL 转发申请图 9 URL 转发设置【说明】当然在提供这些功能的时候,需要在 DNS 管理处,将 的 A 记录解析为托管的 Windows Server 2008 主机的公网的 IP 地址,在本例中为123.182.242.12。5.6 使用 IIS 转发如果 DNS 不支持“URL 转发 ”的功能,或者你的域名没有通过“备案” ,则不能提供URL 转发申请,这时候,就可以利用 IIS 的“HTTP 转发”功能,
20、将对 http:/ 的访问转发到 http:/:801,此时,需要进行如下的操作(需要管理员 A 进行设置)。(1)管理员 A 在 Windows Server 2008 主机上安装“Internet 信息服务”,在安装的时候,要安装“HTTP 重定向” 功能(如图 10 所示)以及安装“IIS 管理工具” 。图 10 安装 IIS 并安装 HTTP 重定向功能(2)在主机上,创建一个文件夹,并且在该文件夹创建多个目录,为了方便日后管理,目录的名称要与 B、C 用户的网站的名称相同或相似,例如,在 D 盘 site 目录中创建、 目录。(3)进入“Internet 信息服务器” 中,创建网站,
21、其主机头为 ,目录为 D盘对应的文件夹,本例为 d:,如图 12 所示。图 12 创建网站(4)然后在“Internet 信息服务管理器” 中,选择新创建的网站 ,在右侧的“功能视图 ”中双击“HTTP 重定向 ”, 选中“将请求重定向到此目标” ,并且键入重定向后的网址 http:/:801,并且在“状态代码” 下拉列表中选择“ 永久(301)”,然后单击右侧的“ 应用” 链接,让设置生效,如图 13 所示。图 13 重定向到真正的网站(5)在远程计算机上,在浏览器中键入 的时候,会被定向到http:/:801,测试完成,如图 14 所示。图 14 在远程主机上测试【说明】因为 是本次实验的域名,所以在你真正测试的时候,需要修改远程测试主机与 Windows Server 2008 本地主机的 hosts 文件,添加到 的解析到正确的公网地址:123.182.242.12 这样才能完成整个测试。而对于其他的需要转发的网站,在主机的“Internet 信息服务管理器”中,创建每一个的“HTTP 重定向 ”,这些就不一一介绍了。