我将我的第一个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文件中的文件夹。
答案 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服务器。这也提供了额外的保护层。