Tomcat如何将所有子域名转发到虚拟主机?

3
我有一个单独的 Tomcat 服务器,上面有4个网站。
我使用虚拟主机来实现这一点。 但现在我需要将“所有”子域名转发到单个主机上。
例如,在我的 serveral.xml 文件中,我想要:
  <Host name="www.acme2.com"  appBase="acme2"
        unpackWARs="true" autoDeploy="false">
    <Alias>acme2.com</Alias>
    <Alias>*.acme2.com</Alias>
  </Host>

我知道我可以一个一个地添加子域名,但是我想让“所有”子域名使用同一个应用程序。我的 DNS 将所有子域名转发到服务器 IP。
这对于我的默认主机有效,因为所有子域名都发送到它,但我希望将每个虚拟主机的子域名发送到它自己的应用程序中。

你尝试过使用nginx作为代理服务器吗?你可以很容易地使用nginx配置你的子域名。 - dieter
寻找一个Tomcat解决方案。 - James
2个回答

1
使用nginx进行重定向配置。在域配置文件中,您可以指定。
server {
  server_name *.domain.com;
  return 301 http://domain.com$request_uri;
}

将子域名重定向到域名。
nginx网站有一个相当不错的入门指南

1

虚拟主机示例开始

在单个IP地址上运行多个基于名称的网站。

您的服务器有一个IP地址,并且多个别名(CNAMES)指向DNS中的此计算机。您想在该计算机上运行用于www.example1.comwww.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地址或端口提供不同内容的情况。

资源链接:

  1. 将同一个Java Web应用程序重定向/映射到多个子域
  2. 两个域名及其子域名映射到相同的IP地址,如何在同一Tomcat服务器上托管不同的应用程序?
  3. 如何在Tomcat和Java上托管随机或通配符子域?
  4. 使用mod_jk在Apache/Tomcat中处理多个子域名

寻找一个Tomcat解决方案。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接