我有一个tomcat服务器,上面有4个网站。
我使用虚拟主机来允许此操作。 但现在我需要转发所有"子域到单个主机。
即。在我想要的serveral.xml中,
<Host name="www.acme2.com" appBase="acme2"
unpackWARs="true" autoDeploy="false">
<Alias>acme2.com</Alias>
<Alias>*.acme2.com</Alias>
</Host>
我知道我可以逐个添加子域名,但我想要&#34;所有&#34;子域使用相同的应用程序。我的DNS将所有子域转发到服务器IP。
这适用于我的默认主机,因为所有子域都会发送给它,但我希望每个虚拟主机子域都发送到自己的应用。
答案 0 :(得分:1)
使用nginx配置重定向。在域配置文件中,您可以指定
server {
server_name *.domain.com;
return 301 http://domain.com$request_uri;
}
从子域重定向到域。
nginx网站有一个很好的Getting Started指南。
答案 1 :(得分:1)
在一个IP地址上运行多个基于名称的网站。
您的服务器只有一个IP地址,并且多个别名(CNAMES)指向DNS中的此计算机。您想在此计算机上运行www.example1.com
和www.example2.org
的Web服务器。
在Apache服务器上创建虚拟主机配置不会神奇地导致为这些主机名创建DNS条目。您必须拥有DNS中的名称,解析为您的IP地址,否则其他任何人都无法看到您的网站。您可以将条目放在hosts文件中以进行本地测试,但这仅适用于具有这些主机条目的计算机。
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here
</VirtualHost>
星号匹配所有地址,因此主服务器不提供任何请求。由于www.example1.com是配置文件中的第一个,因此它具有最高优先级,可以被视为默认服务器或主服务器。这意味着如果收到的请求与指定的ServerName指令之一不匹配,它将由第一个VirtualHost提供。
如果您愿意,可以将*
替换为系统的实际IP地址。在这种情况下,VirtualHost的参数必须与
了NameVirtualHost:
NameVirtualHost 172.20.30.40
<VirtualHost 172.20.30.40>
# etc ...
但是,在IP地址不可预测的系统上使用*也很有用 - 例如,如果您的ISP具有动态IP地址,并且您正在使用各种动态DNS解决方案。由于*匹配任何IP地址,因此无论何时IP地址发生变化,此配置都无需更改。
以上配置是您在几乎所有基于名称的虚拟主机情况下都要使用的配置。事实上,这种配置唯一不适用的是基于不同的IP地址或端口提供不同的内容。