我在一台机器上为 2 个 Web 服务器创建了 2 个 VM。一个服务器将运行 IIS 服务,另一个服务器将运行 Apache 服务。
如何配置我的服务器/路由器,以使 2 个不同的域在具有单个静态 IP 地址的不同服务器上工作。
答案1
如果您想在标准 HTTP(80)或 HTTPS(443)端口上托管您的 Web 服务器,我认为您不能让两台不同的机器仅根据域名来应答。
问题是,当您访问某个网站时,您不是通过域名访问它 - 您只是使用 DNS 将该域名映射到 IP。您可以在同一个 IP 上托管多个网站的原因是 Host 标头 - 请参阅14.23 Host
RFC 2616 的部分:
其工作原理如下。假设我们有两个域 a.example.com 和 b.example.com 指向同一个 IP,例如 10.0.0.10。客户端通常使用一些 Web 浏览器向 DNS 询问 a.example.com 的 IP。DNS 回复 10.0.0.10。然后客户端发送如下内容:
Host: a.example.com
当您的网络服务器收到此信息时,它就可以确定您实际上想要的是 a.example.com 而不是 b.example.com(或者可能是该网络服务器上的其他虚拟主机)。
但是,在您的示例中,您没有一台服务器 - 您有两台服务器。路由器需要仅根据 IP 路由到其中一台 - Host 标头在应用程序层处理,而路由在 IP 层完成(请参阅TCP/IP 模型)。虽然有些路由器会根据应用层做出一些决策,但我认为没有任何路由器可以深入到数据包中去检查 HTTP 标头并根据结果进行路由。
您可以做的是:
- 将两个虚拟机中的一个设为默认虚拟机,然后通过代理连接到另一个虚拟机
- 创建第三台虚拟机,用于代理当前两台虚拟机
有关虚拟主机的更多信息,请参阅:
请参阅有关设置反向代理的示例:
- http://www.apachetutor.org/admin/reverseproxies
- http://blog.lundscape.com/2009/05/configure-a-reverse-proxy-with-apache/
以下是可用于制作反向代理的模块的参考文档:
- http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
- http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
希望这可以帮助。