我来自这个SO,但是我的案例不是在Tomcat上,而是在JBoss EAP 6上。因此,假设我在JBoss AS 6上运行了两个Web应用程序app1和app2:
http://localhost:8080/app1
http://localhost:8080/app2
但是,我想配置Tomcat,以便它们在根上下文中在单独的端口后面运行:
http://localhost:8081
http://localhost:8082
编辑:这些说明是针对JBoss AS6的,如原始问题所要求。AS7具有不同的配置文件语法。
您的问题分为两个部分:
这很容易。
将这样的行添加到 $JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml
$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml
<!-- A HTTP/1.1 Connector on port 8081 --> <Connector protocol="HTTP/1.1" port="8081" address="${jboss.bind.address}" redirectPort="${jboss.web.https.port}" /> <!-- A HTTP/1.1 Connector on port 8082 --> <Connector protocol="HTTP/1.1" port="8082" address="${jboss.bind.address}" redirectPort="${jboss.web.https.port}" />
服务器启动时,请在日志中观察以下消息:
11:56:23,639 INFO [org.apache.coyote.http11.Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8081 11:56:23,640 INFO [org.apache.coyote.http11.Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8082
注意:如果要“正确”执行此操作,则应使用占位符而不是硬编码数字,并进行编辑$JBOSS_HOME/server/default/conf/bindingservice.beans/META- INF/bindings-jboss-beans.xml以定义它们。但是,除非您需要通过管理UI来管理端口,否则这将是过大的选择。
$JBOSS_HOME/server/default/conf/bindingservice.beans/META- INF/bindings-jboss-beans.xml
这要困难得多。JBoss使用其自己的Tomcat引擎,该引擎不支持多个webapp根目录(appBase属性不起作用)。因此,不可能为连接器配置两个不同的目录。可以添加虚拟主机,并jboss- web.xml在每个应用程序中使用它来配置它响应的虚拟主机,但这意味着您必须在客户端URL中使用不同的名称。
jboss- web.xml
您在这里有两个选择。
将其添加到Host配置元素中(在其他阀定义之前)$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml
Host
<Valve className="org.jboss.web.rewrite.RewriteValve" />
创建一个$JBOSS_HOME/server/default/conf/jboss.web/localhost/rewrite.properties具有以下内容的文件:
$JBOSS_HOME/server/default/conf/jboss.web/localhost/rewrite.properties
RewriteCond %{SERVER_PORT} =8081 RewriteRule ^/(.*)$ /app1/$1 [L] RewriteCond %{SERVER_PORT} =8082 RewriteRule ^/(.*)$ /app2/$1 [L]
注意:您可能需要创建$JBOSS_HOME/server/default/conf/jboss.web/localhost/目录,默认情况下该目录不存在。
$JBOSS_HOME/server/default/conf/jboss.web/localhost/
注意2:的位置rewrite.properties取决于Valve标记在中的位置server.xml。最直观的放置是与其他Valve元素一起使用。但是,它也直接在下面有效Engine。在这种情况下,rewrite.properties文件需要上移一个目录。
rewrite.properties
Valve
server.xml
Engine
部署Servlet筛选器以$JBOSS_HOME/server/default/deploy/ROOT.war/根据传入端口调度请求。您可以推出自己的自定义过滤器实现,也可以将UrlRewriteFilter与如下配置一起使用:
$JBOSS_HOME/server/default/deploy/ROOT.war/
<rule> <condition type="port">8081</condition> <from>/(.*)</from> <to context="app1">/$1</to> </rule> <rule> <condition type="port">8082</condition> <from>/(.*)</from> <to context="app2">/$1</to> </rule>
也可以看看:
编辑:鉴于JBoss配置的复杂性,您还可以选择位于应用程序服务器前面的基于Apache的反向代理。