![如何在单个 IP 地址后面托管多个物理 Web 服务器?](https://linux22.com/image/1367968/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%8D%95%E4%B8%AA%20IP%20%E5%9C%B0%E5%9D%80%E5%90%8E%E9%9D%A2%E6%89%98%E7%AE%A1%E5%A4%9A%E4%B8%AA%E7%89%A9%E7%90%86%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我在家里运行多个网络服务器,每个服务器都插入我的路由器。
服务器 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 并可充当重定向器。它们需要加载服务器证书才能执行本质上是“中间人”的攻击。