我正在研究一个解决方案,我们将使用带有 Hyper-V 的 Windows 2008 在单个服务器上设置 40 个虚拟 Web 服务器。
不幸的是,我们只有 3 个可用的公共 IP 地址,所以我需要一个基本上单一的公共 IP 来将请求路由到适当的服务器。
我在考虑在主机上运行一个 Web 服务器,比如说在“ web.company.com
”上运行,那么每个虚拟服务器都可以是一个子域,比如“ client1.web.company.com
”。然后,前端 Web 服务器会将请求代理到虚拟 Web 服务器client1
。
这是配置系统的合理方法吗?如果是,可以使用 IIS 进行代理吗?或者其他开源 Web 服务器是否效果更好(apache、lighttpd 等)?
答案1
这听起来很奇怪。40 个站点有 40 台虚拟机?
IIS 可以在每台机器上托管多个网站。您能否拥有 3 台服务器,并使用 IIS 主机头来托管每台服务器 15 个网站?还是每个 Web 应用程序实例都必须如此专用?
无论如何,如果您想在 40 个盒子之间共享一个 IP,您将需要进行某种反向代理。您需要在反向代理中设置每个主机名,以便它知道将该主机头发送到哪个盒子...
答案2
如果您被迫对每个网站都进行虚拟机管理,那么您将面临严重的成本问题。除非您正在运行 Windows Server 2008 Datacenter,否则您必须为每个虚拟机安装授权操作系统。2008 Enterprise 包括 4 个虚拟机客户机。
更不用说保持 40 台机器而不是一台机器运行(使用 hostheadering)的麻烦了。
看 - http://www.microsoft.com/hyper-v-server/en/us/default.aspx
答案3
最好的选择可能是使用负载平衡器(或两个,在集群配置中)充当“集中器”。
它与您提到的解决方案没有太大区别,但具有允许外部访问背后资源的高可用性的好处。
答案4
我想到了一个解决方案。我为 IIS7 安装了 URL Rewrite 扩展,并使用重写规则将特定子域的流量路由到正确的内部主机。