我有一个networking设置如下所示。 带有公共IP的Windows Server 2012 R2盒子,后面有多个CentOS 7networking服务器。 每个CentOS盒子是多个网站的networking服务器。 CentOS盒子运行Apache 2.4和PHP 5.5 。
所有站点的DNS条目都指向Win Server的公共IP地址( 1.2.3.4 )。
我的问题是 :如何最有效地将这些网站从CentOS盒子送到terminal用户?
我一直在寻找IIS反向代理。 这是我目前(超笨重)的解决scheme:
Win Server获取foo.com的请求 com.foo.web1 , IIS包含一个$_SERVERvariables来为PHP提供正确的URL( foo.com )。 Win Server hosts文件说com.foo.web1转到com.foo.web1的IP( 192.168.1.2 ) com.foo.web1有一个com.foo.web1的虚拟主机,然后为foo.com提供所有的东西。 这工作,但它感觉像一个可怕的黑客。 理想情况下,我想避免重写url。 我只想说foo.com ? 发送该请求到192.168.1.2 。 thing.com ? 发送到192.168.1.3 。 这听起来就像DNS,但显然我不能告诉用户去一些内部的IP。 也许我实际上需要一个转发代理? 我不能只转发端口80因为需要在多个服务器之间拆分请求。
我觉得这个问题以前一定解决了,但是我弄不明白。 (我真的是开发人员,而不是系统pipe理员)。 帮助将不胜感激!
为了避免任何人通过阅读所有的评论来发现这一点,我结束了倾销Windows Server和使用Linux与HAProxy。 HAProxy能够转发请求,而无需重写URL。
我还没有findWindows的一个很好的解决scheme ,但我认为这可能是可以接受的:
通过添加一个端口来重写所有的URL,所以:
然后,在Windows Server上:
这是未经testing的 。
您可以使用Windows主机文件(c:\ windows \ system32 \ drivers \ etc \ hosts)覆盖DNS,然后添加以下行:
192.168.1.2 foo.com
现在你的Windows机器,将为foo.com联系192.168.1.2,即使foo.com在DNS中有另一个ip。
因此,如果互联网上的系统联系foo.com,他们将使用DNS查找foo.com,他们将连接到您的Windows机器。 现在,如果你有一个'redirect'(微软的术语,我更喜欢'反向代理规则')foo.com作为redirect规则,你的Windows将使用hosts文件查找'foo.com'并连接到你的内部服务器。
如果安装了应用程序请求路由(ARR),则应该在IISpipe理器中看到一个新的项目“Server Farms”。
您可以使用一台服务器192.168.1.2创build一个服务器场。
之后,您可以为foo.com添加反向代理规则(重写规则),并将其路由到您在第一步中创build的服务器场。
有关详细信息,请参阅http://masteringlync.com/2013/02/12/using-iis-application-request-routing-arr-as-a-tmg-replacement/ 。
我从来没有直接使用IIS的ARRfunction,但根据它的文档,它似乎可能会做你所需要的:
平衡在各个服务器之间更有效地加载,以最大限度地利用资源
IIS应用程序请求路由为pipe理员提供了根据URL,HTTP标头和服务器variables创build强大的路由规则的能力,从而为每个请求确定最合适的Web应用程序服务器。 ARR在应用级进行请求路由决策,可以与硬件负载平衡器或Windowsnetworking负载平衡结合使用,作为对HTTP请求的控制层。 此外,通过在客户端和服务器之间创build关联,ARR使托pipe提供程序能够将来自客户端的请求路由到服务器场中的特定Web应用程序服务器。
这就是说,我不知道它会不会真的起作用,甚至有多好。 我想可能你的时间可能会更好用在Linux上设置盒子,并使用HAProxy或其他Linux负载平衡器/反向代理(Nginx,Apache与mod_proxy)。
事实上,你也许可以在Windows上使用mod_proxy使用Apache。
无论哪种方式,我知道一个事实,HAProxy可以做到你想要的,因为这是它的意思。