如何在 Tomcat 8 中将多个 exploded webapps(在 $CATALINA_BASE/webapps 之外)设置为 ROOT?

How to set up multiple exploded webapps (outside of $CATALINA_BASE/webapps) as ROOT in Tomcat 8?

这是我需要的摘要:

  1. 运行 个 Tomcat 8 实例中的多个应用程序。
  2. 这些应用程序已展开(未打包为 WAR),需要位于 /misc/
  3. 他们需要运行作为ROOT(即URL末尾没有上下文路径)

我已经通过使用 Tomcat 的虚拟主机成功地将多个应用程序作为 ROOT 操作。在 /var/lib/tomcat8/conf/server.xml 中,我有:

<Host name="qa01" appBase="qa01"
      unpackWARS="true" autoDeploy="true">
    <Alias>qa01.example.com</Alias>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="qa01_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

然后,我将 nginx 配置为:

server {
    listen 80;
    listen [::]:80;
    server_name qa01.example.com;

    access_log /var/log/nginx/qa01-access.log;
    error_log /var/log/nginx/qa01-error.log;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080/;
    }
}

到目前为止一切顺利,我测试了它,它肯定指向 /var/lib/tomcat8/qa01/ROOT/index.html

当我需要这个应用程序改为 /misc/qa01/webapps/ROOT/ 时,问题就来了。

我试过用下面的方法添加 /var/lib/tomcat8/qa01/ROOT/META-INF/context.xml 但没用。

<Context docBase="/misc/qa01/webapps/ROOT/">
</Context>

有人知道我做错了什么吗?

我建议:

  1. 在Tomcatwebapps目录中使用软链接。指向已部署的 Web 应用程序。假设他们遵循 Java EE Servlet 标准。请阅读此 .

  2. 明智地使用 <tomcat-home>/conf/context.xml 配置文件来管理 ROOT 上下文。请阅读更多相关信息 context.xml here and here.

找出我做错了什么(似乎睡个好觉有帮助)。

我需要这个 /var/lib/tomcat8/exampleApp/ROOT/META-INF/context.xml

<Context path=""
        antiResourceLocking="false" />

然后我需要在/var/lib/tomcat8/conf/Catalina/exampleApp/ROOT.xml中配置Context。这实际上指向我爆炸的 WAR 所在的位置。

<Context docBase="/misc/qa01/webapps/ROOT/">
</Context>