通过单个 IP 背后的多台服务器为网站提供服务

通过单个 IP 背后的多台服务器为网站提供服务

我有一个如下所示的网络设置。一个Windows Server 2012 R2具有公共 IP 的盒子,CentOS 7后面有多个 Web 服务器。每个CentOS盒子都是多个站点的 Web 服务器。CentOS 盒子正在运行Apache 2.4PHP 5.5

带有 Web 服务器的 Windows 服务器

所有站点的 DNS 条目均指向Win Server( 1.2.3.4) 的公共 IP。

我的问题是:我怎样才能最有效地为网站从CentOS盒子到最终用户提供服务?

我一直在研究IIS反向代理。这是我目前(超级笨重的)解决方案:

  • Win Server收到请求foo.com
  • 该 URL 被重写com.foo.web1IIS包含一个$_SERVER变量,用于向 PHP 提供正确的 URL(foo.com)。
  • hostsWin Server文件显示访问( )com.foo.web1的 IPWeb1192.168.1.2
  • Web1有一个 vhost ,为其com.foo.web1提供所有内容foo.com

这可行,但感觉像是一个糟糕的黑客行为。理想情况下,我想避免重写 URL。我只想说foo.com?将该请求发送到192.168.1.2thing.com?将其发送到192.168.1.3。这听起来就像 DNS,但显然我不能只告诉用户转到某个内部 IP。也许我真的需要一个正向代理?我不能只转发端口,80因为需要在多个服务器之间拆分请求。

我觉得这个问题以前肯定已经解决了,但我搞不懂。(我真的是一名开发人员,而不是系统管理员)。非常感谢您的帮助!

我放弃了 Win Server,转而使用 Linux,并使用了 HAProxy

为了避免有人看到所有评论,我最终放弃了 Windows Server,转而使用带有 HAProxy 的 Linux。HAProxy 无需重写 URL 即可转发请求。

我还没有找到一个好的Windows 解决方案,但我认为这是可以接受的:

通过添加端口重写所有 URL,因此:

  • foo.com -> foo.com:8081
  • bar.com -> bar.com:8081
  • thing.com -> thing.com:8082
  • stuff.com -> stuff.com:8082

然后,在 Windows Server 上:

  • 将端口 8081 转发到 Web1 上的端口 80
  • 将端口 8082 转发到端口 80 和 Web2

这是未经测试

答案1

如果您安装了应用程序请求路由 (ARR),您应该会在 IIS 管理器中看到一个新项目“服务器场”。

您可以创建一个只有一台服务器 192.168.1.2 的服务器场。

此后,您可以为 foo.com 添加反向代理规则(重写规则),并将其路由到您在第一步中创建的服务器场。

http://masteringlync.com/2013/02/12/using-iis-application-request-routing-arr-as-a-tmg-replacement/了解更多信息

答案2

我从未直接使用过 IIS 的 ARR 功能,但根据其文档看起来它可以满足您的需要:

更有效地在服务器之间平衡负载,以最大限度地提高资源利用率

IIS 应用程序请求路由使管理员能够根据 URL、HTTP 标头和服务器变量创建强大的路由规则,以确定每个请求最合适的 Web 应用程序服务器。ARR 在应用程序级别做出请求路由决策,并且可以与硬件负载平衡器或 Windows 网络负载平衡结合使用,作为对 HTTP 请求的附加控制层。此外,ARR 允许托管提供商通过在客户端和服务器之间创建关联性,将客户端的请求路由到服务器场中的特定 Web 应用程序服务器。

话虽如此,我不知道它是否真的能工作,甚至不知道效果如何。我认为也许你最好花时间在 Linux 上设置盒子并使用HAProxy或其他一些 Linux 负载均衡器/反向代理(Nginx、带有 mod_proxy 的 Apache)。

事实上,您也可以在 Windows 上使用带有 mod_proxy 的 Apache 来执行此操作。

无论如何,我知道 HAProxy 可以做你想做的事,因为这就是它的用途。

答案3

您可以使用 Windows hosts 文件 (c:\windows\system32\drivers\etc\hosts) 覆盖 DNS,并添加以下行:

192.168.1.2 foo.com

现在你的 Windows 机器将会联系 192.168.1.2 来访问 foo.com,即使 foo.com 在 DNS 中有另一个 IP。

因此,如果互联网上的系统联系 foo.com,它们将使用 DNS 查找 foo.com,并连接到您的 Windows 机器。现在,如果您有一个“重定向”(微软术语,我更喜欢“反向代理规则”)到 foo.com 作为重定向规则,您的 Windows 机器将使用 hosts 文件查找“foo.com”并连接到您的内部服务器。

相关内容