我有一个如下所示的网络设置。一个Windows Server 2012 R2
具有公共 IP 的盒子,CentOS 7
后面有多个 Web 服务器。每个CentOS
盒子都是多个站点的 Web 服务器。CentOS 盒子正在运行Apache 2.4
。PHP 5.5
所有站点的 DNS 条目均指向Win Server
( 1.2.3.4
) 的公共 IP。
我的问题是:我怎样才能最有效地为网站从CentOS
盒子到最终用户提供服务?
我一直在研究IIS
反向代理。这是我目前(超级笨重的)解决方案:
Win Server
收到请求foo.com
- 该 URL 被重写
com.foo.web1
并IIS
包含一个$_SERVER
变量,用于向 PHP 提供正确的 URL(foo.com
)。 - hosts
Win Server
文件显示访问( )com.foo.web1
的 IPWeb1
192.168.1.2
Web1
有一个 vhost ,为其com.foo.web1
提供所有内容foo.com
。
这可行,但感觉像是一个糟糕的黑客行为。理想情况下,我想避免重写 URL。我只想说foo.com
?将该请求发送到192.168.1.2
。thing.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”并连接到您的内部服务器。