Tomcat虚拟主机配置混乱

时间:2014-04-29 19:28:40

标签: tomcat grails virtualhost

我将我的第一个Groovy / Grails应用程序部署到Tomcat 6服务器上,并且我在尝试在Tomcat上配置虚拟主机时遇到了一些困惑。我为Grails附带的Tomcat运行部署脚本,并将WAR文件复制到webapps文件夹下的Tomcat服务器,并将其解压缩(或者Tomcat执行的操作我不确定)。所以我有以下内容:

C:\Program Files\Tomcat\webapps\myapp.WAR
C:\Program Files\Tomcat\webapps\myapp\{all files from the WAR}

通过使用服务器的DNS名称,我可以毫无问题地访问它:

http://server.dns.com/myapp/

但是,我遇到了尝试为此创建虚拟主机的问题。我已将以下行添加到server.xml文件中:

<Host name="www.fancynewdomainname.com" appBase="webapps/myapp"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
</Host>

但我得到的只是空白页。

我已经尝试过Google这个问题了,但是我阅读的越多,我就会感到困惑。

P.S。作为旁注,我注意到在将此虚拟主机添加到server.xml文件后,我还有以下文件夹:

C:\Progrma Files\Tomcat\work\Catalina\www.fancynewdomainname.com\

但它似乎主要是空的,只有几个空文件夹模仿WAR文件中的文件夹。

3 个答案:

答案 0 :(得分:1)

尝试从appBase属性中删除上下文名称,例如appBase="webapps"

编辑:

如果我正确理解您要实现的目标,我认为您需要为每个虚拟主机定义一个单独的appBase,例如:

<Host name="www.somedomainname.com" appBase="webapps" ...
<Host name="www.fancynewdomainname.com" appBase="webapps2" ...

然后在每个appBase中,将主要webapp重命名为&#34; ROOT.war&#34; (因此可以在没有上下文名称的情况下访问它。)

答案 1 :(得分:0)

将原始server.xml行更改为以下内容似乎可以解决问题:

<Host name="www.fancynewdomainname.com" appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
  <Context path="" docBase="myapp"/>
</Host>

基本上我将appBase更改为“webapps”并添加了包含Context定义的行,该定义实际指向webapps下的正确应用程序。

答案 2 :(得分:0)

在Grails Config.groovy中,您可以通过添加以下内容来更改上下文:

grails.app.context =“$ {appName} -helloworld”

顺便说一句,Tomcat打开了战争。将unpackWAR设置为false将阻止这种情况发生。

处理此问题的另一种方法是将Apache HTTP服务器放在此前面,然后代理到Tomcat服务器。这也提供了额外的保护层。