在专用网络上托管多个 Web 服务器或 Web 应用程序

网络工程 纳特 转发端口
2022-02-05 19:15:12

如果一个网站托管在公共网络上,则可以使用它的 IP 直接访问它。如果它托管在专用网络上,并且 NAT 设备进行某种端口转发,它仍然可以被访问。

如果有多个 Web 服务器实例,则 NAT 路由器可以执行负载平衡。

但是,如果有 2 个或更多不相关的服务器托管在一个私人空间上怎么办。

在这种情况下,如何识别流量的目的地是哪台服务器。

在任何云托管平台上,例如 AWS。可能有几个不同的服务器,但只有 1 个公共 IP 供所有传入流量使用(当然 AWS 有许多公共 IP)。

但一般情况下,如果oif服务器的数量超过公共IP的数量,则无法使用这种帽子端口转发。交通如何到达正确的目的地。

我认为的一种方法是在路由器上进行深度数据包检查,以便读取应用程序标头中的 URL

2个回答

多个公共 IP:每台服务器都需要一个不同的公共 IP,客户端从该 IP 转发

单一公网IP,简单而丑陋的设置:在公网IP地址的不同端口上运行服务器并相应转发

单一公共 IP,更复杂的设置:安装您将客户端转发到的反向代理,在应用层分离服务器并从代理转发到关联服务器(正确地说,这不是“转发”,而是新的 TCP 连接);HTTPS 需要在代理上终止。

我认为的一种方法是在路由器上进行深度数据包检查,以便读取应用程序标头中的 URL

有鸡和蛋的问题。应用层标头直到 TCP 连接建立后才会发送,但建立连接的过程会建立诸如初始序列号之类的东西,因此一旦建立 TCP 连接,它就不能使用 NAT 转移。

因此,需要一个应用程序级代理,它可以接受来自客户端的 TCP 连接,检查并可能修改*应用程序标头,并与后端服务器建立单独的 TCP 连接。

注意:如果您的客户端支持 SNI(大多数现代 Web 浏览器都支持),则在以这种方式代理它时不需要解密 tls 流量。

* 例如将客户端的 IP 地址传递给后端服务器以进行日志记录和滥用控制。