Tomcat 虚拟主机配置混乱

Posted

技术标签:

【中文标题】Tomcat 虚拟主机配置混乱【英文标题】:Tomcat Virtual Host configuration confusion 【发布时间】:2014-06-15 22:02:43 【问题描述】:

我正在将我的第一个 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>

但我得到的只是空白页。

我试过用谷歌搜索这个问题,但我越读越困惑。

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

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

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

【问题讨论】:

您找到合适的解决方案了吗?我也面临着类似的问题。 【参考方案1】:

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

编辑:

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

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

然后在每个 appBase 中,将主 webapp 重命名为“ROOT.war”(这样就可以在没有上下文名称的情况下访问它)。

【讨论】:

这是令人困惑的事情之一......如果我将其更改为“webapps”,Tomcat 怎么知道将 dns 名称指向“webapps/myapp”与“webapps/myotherapp”或“ webapps/myotherotherapp”? 感谢您的编辑...不幸的是,这需要手动部署,因为 Grails Tomcat 部署脚本将应用程序放在 webapps 文件夹中,并且它们会扩展到 webapps 文件夹的子文件夹中。但是,我相信我想出了如何做到这一点。我会尽快发布答案。【参考方案2】:

将原始 server.xml 行更改为以下内容似乎可以使事情正常进行:

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

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

【讨论】:

我说得太早了。这确实有效,因为它正确地到达了主机指向的“应用程序”,但是,它忽略了应用程序中定义的所有上下文信息,因为我在 server.xml 文件中包含了一个上下文条目。所以这不是一个合适的解决方案。【参考方案3】:

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

grails.app.context = "$appName-helloworld"

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

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

【讨论】:

以上是关于Tomcat 虚拟主机配置混乱的主要内容,如果未能解决你的问题,请参考以下文章

配置Tomcat监听80端口配置Tomcat虚拟主机Tomcat日志

配置Tomcat监听80端口 配置Tomcat虚拟主机 Tomcat日志

配置Tomcat监听80端口 配置Tomcat虚拟主机 Tomcat日志

Tomcat配置Tomcat的虚拟主机 日志

配置Tomcat监听80端口 配置Tomcat虚拟主机 Tomcat日志

配置Tomcat监听80端口, 配置Tomcat虚拟主机,Tomcat日志