我有几台服务器,它们都运行不同的网站。它们都有相同的外部 IP 地址(我在家里运行它们,而且我只有一个带有一个 IP 地址的路由器)。
这两个服务器需要相同的端口。假设端口是 80(HTTP)。所以我为第一台服务器打开了 80 端口,但第二台服务器呢?
所以现在的问题是,当它们都有相同的 IP 和相同的端口时,我如何连接到正确的服务器?
我家里应该安装两个路由器,并设置两个不同的 IP 吗?如果我有 50 台服务器,我应该设置 50 个 IP 吗?
答案1
当它们具有相同的 IP 和相同的端口时,我该如何连接到正确的服务器?
您需要选择一个服务器来接收所有传入请求,例如端口 80,然后将其设置为反向代理(可能通过您的 Web 服务器软件,例如 Apache 或 Nginx)。
这意味着假设服务器 1(您的“反向代理”)拥有网站 A,服务器 2 拥有网站 B:
对网站 A 的请求将由服务器 1 直接处理。
对网站 B(在服务器 2 上)的请求将从服务器 1 传递到服务器 2。
来自服务器 2 的任何响应都将传递给服务器 1,然后返回给客户端。
换句话说,在沟通方面,你应该:
Internet <---> Server 1 <---> Server 2
虽然这里使用“网站”作为一般示例,但有许多类型的服务可以通过反向代理以这种方式中继。
建立这种通信的基本步骤是:
将来自路由器的传入请求端口转发到服务器 1(网站 A)。
配置服务器1上的Web服务器软件,将对服务器2(网站B)的请求发送到服务器2的LAN网络IP。
如果我有 50 台服务器,我应该获得 50 个 IP 吗?
您的反向代理(例如服务器 1)可以配置为根据收到的请求将消息中继到多个单独的服务器。但请注意,为简单起见,每个物理服务器最好都与您的反向代理位于同一网络上。
或者,如果您只是托管简单的网站,大多数 Web 服务器的软件允许在同一台服务器上的同一端口上托管多个网站。例如,在 Apache 中,这些被称为“虚拟主机”,而在 Nginx(虚拟)中,这些被称为“服务器块”。
请注意,这些“虚拟服务器”通常也构成通过反向代理处理请求的基础。