如何在单个 IP 地址后面托管多个物理 Web 服务器?

如何在单个 IP 地址后面托管多个物理 Web 服务器?

我在家里运行多个网络服务器,每个服务器都插入我的路由器。

服务器 A 服务器 B 服务器 C

我目前只能使用一台服务器,因为我的 IP(xx.xxx.xx.xx)端口 80 指向服务器 A。但是有些域指向服务器 A,有些指向 B,等等。

我只有一个 IP 地址,如何指向每个服务器?例如,我的 A(主机)记录全部指向我的 IP 地址。

抱歉,如果我的表达令人困惑。如果我表达不清楚,请告诉我。

每台服务器都运行 Ubuntu Server 12.04.02 并使用 Apache(如果有帮助的话)。我的路由器也是 Netgear,我的 ISP 是 Time Warner Cable。

答案1

网站将Host:通过浏览器发送的标头进行识别。但由于您的路由器无法进行虚拟主机使用的 HTTP 解析,您需要选择服务器作为“端点”(并告诉您的路由器该地址作为虚拟服务器/DMZ)。

然后,你可以将该机器配置为其域的 Web 服务器,并将其他机器的代理服务器配置(例如使用Apache 反向代理),或者(也许更好)您在那台机器上安装代理,并使用它来多路复用对其他服务器的请求。一些域甚至可能托管在同一台机器上。nginx适合这种工作,但您也可以使用其他软件(例如pound)。

我认为第二种解决方案更好,因为您根本不需要摆弄 Web 服务器的配置:一个代理服务器负责代理,多个 Web 服务器负责 Web 服务。如果您需要添加服务器或移动虚拟主机,这种架构更易于维护。

                                    +-- virtual hosts 1..9 -- server B
                                    |
router ----- machine A (nginx?) ----+-- virtual hosts 10..23- server C
                                    |
                                    +-- virtual hosts 24..99- server D

由于请求被解码而增加的延迟两次(一次由代理,一次由其预期接收者)可以忽略不计,并且超过由代理本身提供的加速度所抵消。

此外,在几乎所有情况下,您都可以使用非 HTTPS 服务器作为后端。所有服务器证书和 TLS/SSL 支持都将安装在机器 A 上,并且内部连接可能没有任何问题。

或者,一些路由器(例如 OpenWRT)解码 HTTPS 并可充当重定向器。它们需要加载服务器证书才能执行本质上是“中间人”的攻击。

相关内容