如何将子域名指向不同的本地 IP

如何将子域名指向不同的本地 IP

我的问题与如何将子域名指向具有动态 IP 的本地服务器。区别在于我确实有一个来自 ISP 的静态 IP,我认为我不需要使用 DynDNS 对吗?那么我可以用什么来代替呢?

我的目标是将每个子域指向不同的 Web 服务器,如下所示:
mydomain.com --> 192.168.1.100(主 Web 服务器)
sub1.mydomain.com --> 192.168.1.101(Web 服务器 1)
sub2.mydomain.com --> 192.168.1.102(Web 服务器 2)

我尝试按照说明使用 Apache 的代理模块这里但没有成功。当我通过浏览器访问 sub1.mydomain.com 时,它总是指向 mydomain.com。
我可以用这种方法做到这一点吗?如果不行,请告诉我另一种方法。

我使用 Ubuntu Server 12.04

[解决了]
解决方案

  1. 设置 DNS

指向公网IP的A记录:
1 @ public.ip
2 www public.ip

CNAME记录指向子域名:
1 sub1 我的域名.com
2 sub2 我的域名.com

  1. 设置 Apache。

添加sub1sub2/etc/apache2/sites-available

子1:

<VirtualHost *:80>    
        ServerName sub1.mydomain.com    
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>    
        <Location />
                ProxyPass http://192.168.1.101/
                ProxyPassReverse http://192.168.1.101/
        </Location>    
</VirtualHost>

子2:

<VirtualHost *:80>    
        ServerName sub2.mydomain.com    
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>    
        <Location />
                ProxyPass http://192.168.1.102/
                ProxyPassReverse http://192.168.1.102/
        </Location>    
</VirtualHost>

答案1

我最近才这样做。请参阅我的问题。这是一个漫长的来回过程,但我最终还是把它设置好了。

  • 设置 DNS。A 记录将指向您的公共 IP。因此,yourdomain.com 指向 your.pub.ip.add。为子域添加 CNAME 记录。因此,sub1.yourdomain.com 指向@,sub2.yourdomain.com 指向@,等等。尽管子域都指向同一个地址,但浏览器将告知 Web 服务器您要访问哪个子域。

  • 设置 Apache。您需要为每个子域设置虚拟主机(可能也为主域设置)。您可以在不同位置定义虚拟主机...我的虚拟主机定义在 中/etc/apache2/sites-available,并包含<Location>指令,您将在其中设置反向代理。

答案2

这实际上不是 Web 服务器的问题,应该在您的 DNS 中解决。您控制 DNS mydomain.com,对吧?因此,A为指向相关 IP 地址的子域添加记录,确保这些地址由知道它们应该为这些域提供服务的 Web 服务器提供服务,这样一切都会正常。

让所有子域请求都经过主网络服务器mydomain.com,就像某种奇怪的负载平衡器一样,是低效且不必要的。

编辑:抱歉,我没有意识到您使用 192.168.0.0/16 地址来表示您的子域服务器位于内部网络上;我以为您只是在编辑地址,就像您编辑域名一样。

那么:所有 Web 服务器都在内部网络上吗?还是只有子域的 Web 服务器在内部网络上?如果是后者,那么主 Web 服务器和内部服务器之间目前存在哪种 VPN 连接?

答案3

如果我理解正确的话,你的情况如下:

  • 您有一个外部 IP 地址
  • 您有多个内部 Web 服务器(如:不同的物理机或虚拟机,而不仅仅是同一 Web 服务器上的不同 Web 根目录)

在这种情况下,您不能依赖于为每个域使用不同的 IP,因为您只有一个 IP。您也不能简单地告诉 Apache 使用“主机”HTTP 标头路由到正确的子域,因为您有多个 Apache 设置,它们都位于不同的内部 IP 上。

在这种情况下,我会在反向代理模式下使用 Squid:将其安装在“简单”机器上,并让其将请求重定向到每个 Web 服务器(本地或远程)。

设置起来相当容易:查看标准 squid 文档中的此页面,因为它准确描述了您想要执行的操作: http://wiki.squid-cache.org/ConfigExamples/Reverse/MultipleWebservers

请注意,使用反向代理可能会导致一些应用程序兼容性问题,并且在这种情况下设置 SSL 很微妙(但可以做到)。

相关内容