我正在尝试做一些应该相当简单的事情,但我仍然无法让它发挥作用。
假设我的局域网上有 2 台虚拟机。这些机器是用于客户测试目的的 Web 服务器。旧虚拟机运行 IIS6,新虚拟机运行 IIS7.5
假设我只有一个公网 IP 地址可用。在最初的场景中,公网 IP 被映射到旧机器上,一切正常。
现在我需要将这个公共地址“拆分”到这两台机器上。我想要做的是根据主机头将请求“重定向”或“重写”到正确的机器上。
到目前为止,我也尝试使用安装了 IIS7 的“新”机器作为反向代理,并摆弄 ARR 和 Url Rewrite。我还尝试将“Web Farm Framework”与前两个模块结合使用。
简而言之:我无法让它工作:无论如何,所有请求都会重定向到“旧”机器。
长话短说:我试图让事情尽可能干净。我最干净的尝试是建立 2 个服务器群,第一个使用新机器(它本身),第二个使用旧机器。
在我的重写规则中,我将与 www1.*.mydomain.com 匹配的任何内容作为第一条规则,都应路由到 webfarm new,并停止处理。
第二条规则(仅当第一条规则失败时才应检查)规定,与 *.mydomain.com 匹配的任何内容都会被路由到 webfarm old。
在这种情况下,所有内容都会路由到旧机器。但是,如果我禁用 *.mydomain.com 规则,第一个规则实际上会起作用。就好像第二个规则如果启用就会优先,即使它在另一个规则之下。
如果有人有解决方案,即使是完全不同的方法,也欢迎您。我需要根据主机头在那两台机器上分割该公共 IP。
谢谢。
答案1
您想要执行的操作称为“反向代理”,并且有很多选项。大多数“负载平衡器”都是具有一些优点的反向代理。
您的选择大致如下。
设置新服务器(例如 NginX 或 HAProxy)
NginX 的优势在于设置起来相当简单,也有一定的灵活性,但文档不够完善,配置起来也比 IIS/ARR 或 HAProxy 困难
HAProxy 可能是我列出的最强大的解决方案,但也有最多的配置选项
在新服务器上设置应用程序请求路由 (ARR) 和 IIS 的 URL 重写模块,并让每个站点都有一条指向内部站点/服务器的 ARR 规则。
您将需要为内部服务器上的每个站点设置一个主机条目或单独的 IP 绑定。
您需要在公共服务器上设置每个站点,或者制定复杂的 ARR 规则。我发现在 IIS 中为每个站点设置自己的“站点”往往很简单。
在这种情况下,会出现以下问题。
当您的公共代理/iis 实例由于某种原因无法访问内部服务器时,它将返回错误 html。(如果您在旧服务器上有 xml 或 json 服务,则可能需要迁移)。
Server 2008 和 2008 R2 上的 ARR 不支持转发 WebSocket 请求。我不确定 2012 是否支持。
我知道这是一个老问题,但我想给出更完整的答案。
答案2
你还没有真正说明你想做什么,我猜是将内容拆分到多个服务器。我认为Ngix可以满足您的需要。了解为什么要使用 2 台服务器会有所帮助。