![Tomcat6 vhost问题](https://linux22.com/image/522902/Tomcat6%20vhost%E9%97%AE%E9%A2%98.png)
我一直在 XP 开发机器上使用 vhosts,几乎没有遇到任何问题,但我似乎无法在 Ubuntu 上复制环境。我已经在 /etc/hosts 中添加了一行,如下所示:
127.0.0.1 localhost
127.0.0.1 test # ADDED
然后,在 server.xml 中新建一个 Host 条目:
<Host name="test" appBase="webapps2" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
然后为了验证它是否有效,我将默认的 webapps 复制到 webapps2 中。然后确保权限甚至所有者和组都完全相同。然而,当我将浏览器指向http://测试:8080,我得到:
The requested resource (/) is not available.
这几天我一直被这个问题困扰,我知道我可能忽略了一些非常简单的东西。有人有什么想法吗?
答案1
终于让它工作了。在 tomcat 文档中,我解释了以下行:
For Tomcat 6, unlike Tomcat 4.x, it is NOT recommended to place
<Context> elements directly in the server.xml file.
意味着上下文元素根本不应该在 server.xml 中定义。因此,按照建议,我使用了 myWebappROOT/META-INF 目录并在其中定义了 context.xml。但是此段:
* Only if a context file does not exist for the application in the
$CATALINA_BASE/conf/[enginename]/[hostname]/, in an individual file at /META-
INF/context.xml inside the application files. If the web application is
packaged as a WAR then /META-INF/context.xml will be copied to
$CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to match the
application's context path. Once this file exists, it will not be replaced if
a new WAR with a newer /META-INF/context.xml is placed in the host's appBase.
...似乎表明我在 META-INF 中定义的第一个上下文将放置在上述目录中,并且不会被后续编辑所替换。我已选择删除 [enginename]/[hostname] conf 文件(对我来说是 Catalina/test),并在 server.xml 中添加最小上下文元素。这似乎暂时解决了问题,至少从开发环境的角度来看是这样。希望有人能进一步阐明在生产环境中部署额外虚拟主机的正确方法。
答案2
我遇到了同样的问题。我不确定我是否理解了你的回答。我所做的是:
- 将应用程序移动到旁边的文件夹
webapps
(在我的示例中,我们称之为my-folder
),应用程序被移动到其ROOT
子文件夹 - 从第二台主机中删除了 ROOT.xml
$CATALINA_BASE/conf/[enginename]/[hostname]/
,我甚至不确定是否真的需要这一步 在主机元素内添加上下文元素,如下所示:
<Host name="my-domain.name" appBase="my-folder" autoDeploy="true" unpackWARs="true"> <Context path="/"></Context> </Host>
不知何故,它运行了默认应用程序,位于webapps/ROOT
响应所有域和直接 IP http 调用。my-folder/ROOT
响应my-domain.name
符合预期。