我想将两个应用程序foo.war
和bar.war
部署到同一个Tomcat实例。他们是否可以在不同的端口上监听连接,例如foo侦听端口81,bar监听端口82?如果是这样,我该如何配置?我意识到应用程序不必在不同的端口上侦听,但这就是我想要实现的目标。
另外,我正确地说,如果我将foo.war
重命名为ROOT.war
以使其在根上下文中运行,那么对此Tomcat实例的所有请求都将由foo应用程序处理,因此bar必须部署到单独的Tomcat实例吗?
答案 0 :(得分:64)
如果您希望Tomcat监听多个端口,则需要为每个端口设置连接器。要将每个端口映射到不同的应用程序,您需要将每个连接器包装在服务中并使用它自己的appBase
创建主机
server.xml
中的服务定义示例:
<Service name="foo">
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" />
<Engine name="Catalina80" defaultHost="localhost">
<Host name="localhost" appBase="foo" unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
<Service name="bar">
<Connector port="81" protocol="org.apache.coyote.http11.Http11NioProtocol" />
<Engine name="Catalina81" defaultHost="localhost">
<Host name="localhost" appBase="bar" unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
您需要为端口webapps
创建目录foo
而为端口80
创建bar
,而不是将war文件放在81
目录中。将两个war文件命名为ROOT.war
并将它们放在它们自己的基目录中。如果需要,您当然可以在每个目录中拥有多个应用程序。
appBase
中定义的目录是相对于tomcat目录的。通过使用绝对路径,它可以在您的系统上的任何位置。来自documentation:
<强>的appBase 强>
此虚拟主机的 Application Base 目录。这是可能包含要在此虚拟主机上部署的Web应用程序的目录的路径名。您可以指定绝对路径名,或相对于
$CATALINA_BASE
目录的路径名。 [...]如果未指定,将使用默认值webapps
。
另一种选择是保持默认的tomcat配置并使用另一个http服务器(apache,nginx,lighttpd,...)将端口映射到tomcat应用程序的内部路径。
根应用程序不会收到与其他应用程序匹配的请求,例如/foo/example
将转到foo.war
,/example/example
将转到ROOT.war
。
答案 1 :(得分:26)
使用多个正在运行的Web应用程序中的任何一个,在多个用户之间处理多个传入请求和传出响应是Java Servlet技术的目的。所有流量都可以在单个端口上处理。
只需将两个war文件放入Tomcat的webapps文件夹即可。这就是你需要做的。
默认情况下,Tomcat将每个战争(技术上是一个zip文件)扩展(&#34;爆炸&#34;有些人说)到一个文件夹中并自动为你部署应用程序。如果Tomcat已经运行,或者在启动Tomcat时启动时,会发生这种情况。有些人关闭了生产的自动部署功能,以便为Tomcat保存扫描新战争文件的工作。
无需多个端口。 Servlet容器的工作是检查URL并确定应该调用哪个Servlet。
默认情况下,war文件的名称决定了URL。举个例子:
http://www.example.com/foo - &gt; foo.war
http://www.example.com/bar - &gt; bar.war
http://www.example.com/ - &gt; ROOT.war
所有网络应用都可以在同一个端口上提供。您唯一关心的是如果您使用Unix风格的操作系统来保护对低编号端口的访问。这包括Mac OS X,BSD,Linux和Solaris。在URL中使用高编号端口(Tomcat默认为8080),或使用port-forwarding将端口80(Web浏览器的默认)上的传入请求发送到Tomcat的端口(例如8080)。
如果您想要使用不同的域提供服务的战争文件,请了解&#34;虚拟主机&#34; Tomcat中的设置。
答案 2 :(得分:4)
我已成功配置Tomcat以在多个端口上运行应用程序。我不知道这是否是最好的方法,但我只是复制了
的内容<Service>...</Service>
在conf / server.xml中并更改了连接器标记的端口,并更改了主机标记的 appBase 属性。您可以根据部署到的应用 appBase 来控制应用运行的端口。
答案 3 :(得分:0)
我已经在做罗勒上面提到的事情了。
事实证明,我需要对我的 sites-enabled / blah.conf 文件进行通配,以不引用我在添加其他应用之前几个月部署的第一个(也是唯一一个).war。
这是我通配的内容:
如此,你会的。 :)