如何将子域映射到Tomcat 6上的Web应用程序(包括根Web应用程序)?

21

主题已经说得很清楚了。我想要的是将每个子域名映射到一个Web应用程序,例如:

http://root.domain.com:8080 -> http://domain.com:8080/
http://manager.domain.com:8080 -> http://domain.com:8080/manager
http://abc.domain.com:8080 -> http://domain.com:8080/abc
http://def.domain.com:8080 -> http://domain.com:8080/def

在本地主机上,这将是

http://root.localhost:8080 -> http://localhost:8080/
http://manager.localhost:8080 -> http://localhost:8080/manager
http://abc.localhost:8080 -> http://localhost:8080/abc
http://def.localhost:8080 -> http://localhost:8080/def

理想情况下,我希望使用80端口而不是8080端口,但这是另一回事。首先,我很高兴能够使用8080端口来启动它,以便在URL末尾的路径消失。

请注意,箭头不是重定向,而是如果我保留Tomcat不变时将要输入的内容。

我知道Tomcat文档页面http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html。我已经阅读了很多次,但没有取得太多进展。我编辑了etc/hosts以添加127.0.0.1 bbstats.localhost。然后我添加了

<Host name="bbstats.localhost" appBase="webapps/bbstats"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
</Host>

将以下内容添加到Tomcat中conf目录下的server.xml文件中。我的Web应用程序的context.xml如下:

<Context path="/bbstats" docBase="bbstats" debug="5" reloadable="true" crossContext="true"> 
</Context>

重新启动Tomcat。通过Ant重新部署。输入时

http://bbstats.localhost:8080/

在浏览器中输入网址后,我得到了一个空白屏幕。

当使用appBase="webapps"而不是appBase="webapps/bbstats"时,我会进入Tomcat的根应用程序。后一种行为有点预期。但是,如何使bbstats.localhost:8080在URL中没有尾随/ bbstats的情况下转到bbstats Web应用程序?


嗨Karsten,你的Tomcat使用上述配置启动干净吗?catalina日志中有任何错误吗? - codeporn
从我看到的内容来看,干净无误。catalina.*.log中没有错误,只有一个警告:“14.09.2010 17:25:53 org.apache.catalina.startup.HostConfig deployDescriptor WARNUNG: 已指定主机appBase内的docBase C:\dev\tomcat\webapps\bbstats,并将被忽略”,这可能与context.xml中指定了相同的appBase和docBase值有关。 - Kawu
1个回答

28

你可以尝试将每个Web应用程序作为根Web应用程序嵌套在server.xml中的<Host>中,并使用path = ""。我自己没有尝试过这个。

<Host name="bbstats.localhost" appBase="webapps">
    <Context path="" docBase="/bbstats/"/>
</Host>

<Host name="tomcatstuff.localhost" appBase="webapps">
    <Context path="" docBase="/tomcatstuff/"/>
</Host>

2
我现在正在使用 "<Context path="" docBase="/bbstats"/>",现在它可以工作了! :-) 注意,我还从我的 META-INF/context.xml 中删除了 path 和 docBase。引用 http://old.nabble.com/appbase-and-docbase-td18616249.html: "...path 和 docBase 属性不允许在 META-INF/context.xml 的 <Context> 元素中使用" 我进一步发现你的技巧得到了 http://oreilly.com/java/archive/tomcat-tips.html 的确认。干杯! - Kawu
6
按照上述使用docBase的方法会出现“文档基础目录/ bbstats不存在或不是可读目录”的问题,通过去掉斜杠解决: <Context path =“” docBase =“bbstats”/>。非常有效,谢谢! - Kof
2
你好,能否请您指导我如何在Windows服务器上使用Tomcat实现子域配置? - kakabali

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