是否可以在同一个端口(例如 80)上托管具有不同 IP 的多个服务器?

是否可以在同一个端口(例如 80)上托管具有不同 IP 的多个服务器?

我正在尝试设置多个网站域名,但是它们来自不同的服务器,并且由于它们是不同的服务器,因此它们具有不同的 IP,我想知道我是否可以将每个域名的端口转发到 80,到目前为止,当我尝试将多个 IP 端口转发到端口 80 时,我收到一条错误消息,提示“哎呀,本地起始端口重叠!”我必须更改路由器上的选项和设置吗?还是怎样?

答案1

我不太清楚您想要实现什么,但我认为您的设置如下:

  • 你有一个公共 IP 地址(例如你的家庭路由器)
  • 您在内部网络上有多台服务器,每台服务器都托管自己的网站
  • 您想要将同一个端口 (TCP/80) 转发到多个服务器。

我想知道你为什么要将网站托管在不同的服务器上。你可以配置 Apache/nginx/... 进行虚拟托管,这样所有具有不同域名的网站都托管在同一台服务器上,并使用相同的 IP 地址。

另一个选项是将所有网络流量转发到反向代理服务器,例如 HAProxy。此机器将接收端口 80 上的所有流量,并根据 HTTP Host 标头决定将流量转发到哪个物理服务器。这样,您就可以在单独的服务器上托管每个网站(域)。

答案2

你应该学会如何HTTP作品:

  1. 网络浏览器将域名转换(解析)为 IP 地址。
  2. Web 浏览器连接到 IP 地址,通常在端口 80 上(参见传输控制/IP)。端口基本上允许连接到同一 IP 上的多个服务(多路复用)。
  3. 网络浏览器发送网址他对网络服务器感兴趣,包括域名部分。

现在,您有几个问题需要解决:

  1. 您的服务器可能不在互联网上,但您的网关在。20-30 年前有一种丑陋的黑客攻击让您误以为它们在互联网上:NAT。因此,您可以将路由器的(唯一)端口 80 转发到内部主机。还有一个 20 年前的正确解决方案,它可以为每个主机提供一个公共 IP:IPv6
  2. 单个程序需要为所有域提供内容。但是,这个程序可以是反向代理,例如nginx反向代理本身不拥有(托管)内容,而是根据请求中的 URL 联系其他 Web 服务器。这些 Web 服务器也可以拥有与代理位于同一网络中的私有 IP 地址。

编辑:简而言之,您不能将同一端口转发到多个主机。要么使用单个服务器,要么使用反向代理。

相关内容