我有两个域名 services.xxxxxxx.com 和 www.xxxxxxxx.com,它们托管在我本地网络上的两台不同机器上,与其使用端口转发,我更愿意让路由器将每个域名的所有流量转发到正确的机器。我是否需要设置 DNS 服务器来实现这一点,或者是否有其他替代方案来实现这一点?
答案1
有两种方法可以实现此目的,具体取决于您的 ISP 和路由器能够支持哪些功能。但是,您从一开始就应该注意,您的路由器无法区分不同的子域,它只能根据 IP 地址和端口进行路由,而不是根据名称进行路由。
最不可能的方法是您的 ISP 可以提供多个 IP 地址,并且您的路由器也可以处理这种情况(我的旧 Draytek 路由器可以,但我的新 Billion 路由器不能)。在这种情况下,您将设置一个公共 DNS(不是本地的),将两个子域指向不同的地址,并在路由器中确保您也相应地路由这些地址。然后,路由器需要将每个 IP 地址上的端口 80 转发到单个 IP 地址(托管 PC,我假设它们都在一个盒子上?)但两个不同的端口。这是迄今为止最简单、最可靠的方法。如果您表示这是所需的方法,我可以更新答案,提供有关如何正确设置 Apache 和 PC 的更多详细信息。
更可能的情况是,您只有一个外部 IP 地址可用。现在事情变得有点困难,因为两个子域都必须指向一个外部 IP 地址,并且由于路由器无法区分流量,因此将被 NAT 到单个内部地址/端口。在这种情况下,您需要(如 David 所指出的)设置一个反向代理。这可以使用专用代理工具或通过mod_proxy
Apache 完成(其他 Web 服务器(如 NGINX)也可以完成)。您还需要确保您的两个 Web 应用程序实际上在反向代理后面工作,有些则不是。
反向代理将接收每个子域的流量,并将其透明地转发到内部地址/端口组合,以便两个应用程序在主机 PC 上的不同端口上运行。对于简单的 Web 应用程序,配置很简单,但对于复杂的应用程序,配置可能有点复杂。
在这两种情况下,你都需要外部的DNS 不是内部 DNS。