2 个不同的服务器监听相同的端口和相同的公网 IP

2 个不同的服务器监听相同的端口和相同的公网 IP

我正在运行 2 台虚拟机,它们都监听端口 80/443。我只有一个公共 IP 和几个指向我的公共 IP 的子域。我希望能够以某种方式通过端口 80/443 访问这两个虚拟机。

我想到的方案是以某种方式引入第三台虚拟机,它将接收来自外部世界的 80/443 请求并相应地将其重定向到虚拟机。第三台虚拟机可以充当“代理”,它将使用不涉及端口的本地 IP 在虚拟机上发出请求。我不太确定这是否可行,但我愿意接受任何建议。

在此处输入图片描述

答案1

我想到的情况是以某种方式涉及第三台虚拟机,它将接收来自外界的 80/443 请求并将其重定向到虚拟机。

你肯定是以正确的方式看待这个问题的。就我个人而言,我会使用类似HAProxy实现您的目标。实际实施将取决于您的需求/环境。

最简单的方式是针对一个服务器使用一组不同的端口(如 1080/1443)并相应地重定向流量。这几乎可以在任何代理服务器或路由器/NAT 网关中完成。

使用HAProxy或类似软件,然后您可以根据需要设置复杂程度。以下是一些如何指定流量流向一个服务器或另一个服务器的示例:

  • 请求中使用的 URL(例如 /app1/whatever 的请求转到服务器 1,默认转到服务器 2)
  • 发出请求的源 IP
  • 请求的文件类型(所有 .php 文件的请求都发往服务器 2)
  • 用户代理发出请求(所有 iPhone 流量都发往服务器 2)
  • 几乎任何其他你想使用的标头方面
  • 以上任何一种或所有的组合

关于使用的文章和教程有很多HAProxy做很多事情(包括在这里做多个东南网站)。例如,这里有一篇关于根据 URL 路由流量。或者举个例子服务器故障那是根据源IP。Google 会帮你找到可以做的事情的例子。

我建议检查文档尽你所能。

答案2

您所建议的完全是实用且常见的。用来描述您所做的事情的术语之一是“反向代理”。有几种方法可以实现这一点,包括使用 Apache 和 Squid。

由于 http 的工作方式,您不能仅在(简单/iptables 类型)防火墙级别执行此操作 - 您需要拦截数据包来读取标头。

Https 增加了额外的复杂性,您可能需要在内部考虑使用 http 而不是外部的 https - 因为证书会增加额外的开销和复杂性。

您的图表中关于 DNS 的部分不清楚。您将拥有外部 DNS,然后使用代理服务器中的特定规则将域映射到最终的 http(s) 服务器。

相关内容