我阅读了有关端口转发的信息,并且了解到它可以让互联网向您的私人网络发送请求并访问在您的私人地址中的一台计算机上运行的某些服务。
但我怀疑的是,如果我有两台计算机在端口 80 上托管 Web 服务器,会发生什么情况。在这种情况下,路由器如何知道向哪台计算机发送请求。我知道如果只有一台计算机,那么路由器就会知道,但怀疑是否有两台计算机的情况。
这种情况可能是,我的私人网络上有 2 台计算机,每台计算机托管不同的网站。现在我希望我的两台服务器都在端口 80 上运行,这样用户就无需输入端口号 (或者可能是因为某种原因我希望两个 Web 服务器具有相同的端口号)现在会发生什么?
答案1
路由器并不关心。你必须告诉它要转发到两台计算机中的哪一台,它就会忽略另一台。
如果您希望两台计算机都可以通过互联网访问,则必须在路由器上转发两个不同的端口(即80
和),两台计算机各一个。81
如果您希望用户在浏览任一网站时不必输入端口号,则需要设置反向代理,例如nginx在路由器后面的某个地方(在第三台计算机上,或者在前两台计算机中的一台上),并让路由器转发到代理。然后可以配置代理以查看客户端尝试访问的 URI(主机名最常见,查找“Web 服务器虚拟主机”,尽管您可以根据 URI 的其他部分(如路径)做出决定),并将请求转发到原始服务器之一(可以在任何端口上运行)。
答案2
答案3
我认为你的直觉是正确的。
我认为它无法通过端口转发来了解/决定。您只能将端口转发到其中一台计算机,而这必须由路由器的配置决定,即您决定路由器将端口 80 上的请求转发到计算机 A 还是计算机 B。