![如何将子域名指向不同的本地 IP](https://linux22.com/image/592444/%E5%A6%82%E4%BD%95%E5%B0%86%E5%AD%90%E5%9F%9F%E5%90%8D%E6%8C%87%E5%90%91%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%AC%E5%9C%B0%20IP.png)
我的问题与如何将子域名指向具有动态 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
[解决了]
解决方案
- 设置 DNS
指向公网IP的A记录:
1 @ public.ip
2 www public.ip
CNAME记录指向子域名:
1 sub1 我的域名.com
2 sub2 我的域名.com
- 设置 Apache。
添加sub1
和sub2
至/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 很微妙(但可以做到)。