Java 如何在不同端口后面的单个JBoss 6实例上运行不同的应用程序?
我来自日本,但我的案例不是Tomcat,而是JBoss EAP 6。因此,假设我有两个web应用程序app1和app2在JBoss AS 6上运行:Java 如何在不同端口后面的单个JBoss 6实例上运行不同的应用程序?,java,tomcat,servlets,jboss,jboss6.x,Java,Tomcat,Servlets,Jboss,Jboss6.x,我来自日本,但我的案例不是Tomcat,而是JBoss EAP 6。因此,假设我有两个web应用程序app1和app2在JBoss AS 6上运行: http://localhost:8080/app1 app2 onhttp://localhost:8080/app2 但是,我想配置Tomcat,以便它们在根上下文中运行在单独端口后面: http://localhost:8081 app2 onhttp://localhost:8082 如何在JBoss EAP 6上实现?注意:对于我
http://localhost:8080/app1
- app2 on
http://localhost:8080/app2
http://localhost:8081
- app2 on
http://localhost:8082
如何在JBoss EAP 6上实现?注意:对于我来说不起作用,因为它是针对JBoss5的。编辑:这些说明是针对JBossAS6的,正如原始问题中所要求的那样。AS7具有不同的配置文件语法 您的问题有两部分:
$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}" />
<Valve className="org.jboss.web.rewrite.RewriteValve" />
注意:如果您想“正确”地执行此操作,您应该使用占位符而不是硬编码的数字,并编辑$JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings JBOSS beans.xml
来定义它们。但是,除非您需要通过管理UI来管理端口,否则这将是一种过分的做法
将请求发送到端口8081到app1和端口8082到app2
这要困难得多。JBoss使用自己的Tomcat引擎,不支持多个webapp根目录(appBase属性不起作用)。因此,不可能为连接器配置两个不同的目录。可以添加虚拟主机,并在每个应用程序中使用jboss web.xml
来配置它响应的vhost,但这意味着您必须在客户端URL-s中使用不同的名称
你有两个选择
选项1:JBoss阀门
将其添加到$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml中的Host
配置元素(在其他阀门定义之前)
<!-- 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}" />
<Valve className="org.jboss.web.rewrite.RewriteValve" />
注意:您可能需要创建$JBOSS\u HOME/server/default/conf/JBOSS.web/localhost/
目录,默认情况下它不存在
注2:rewrite.properties
的位置取决于server.xml
中Valve
标记的位置。最直观的放置方式是使用其他阀门元件。但是,它也直接在引擎下有效。在这种情况下,rewrite.properties
文件需要向上移动一个目录
选项2:根上下文中的Servlet过滤器
将servlet过滤器部署到$JBOSS\u 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>
8081
/(.*)
/$1
8082
/(.*)
/$1
另见:
编辑:考虑到JBoss配置的复杂性,您也可以选择位于应用服务器前面的基于Apache的反向代理。JBoss AS7版本的配置,在AS6的答案中讨论了该配置,具有多个http连接器和一个重写阀
--- standalone/configuration/standalone.xml.orig 1970-01-01 00:00:00.000000000 -0100
+++ standalone/configuration/standalone.xml 1970-01-01 00:00:00.000000000 -0100
@@ -257,9 +257,17 @@
</subsystem>
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
+ <connector name="http1" protocol="HTTP/1.1" scheme="http" socket-binding="http1"/>
+ <connector name="http2" protocol="HTTP/1.1" scheme="http" socket-binding="http2"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
+ <rewrite pattern="^/(.*)$" substitution="/app1/$1" flags="L">
+ <condition test="%{SERVER_PORT}" pattern="=8081" flags=","/>
+ </rewrite>
+ <rewrite pattern="^/(.*)$" substitution="/app2/$1" flags="L">
+ <condition test="%{SERVER_PORT}" pattern="=8082" flags=","/>
+ </rewrite>
</virtual-server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:webservices:1.1">
@@ -293,6 +301,8 @@
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8009"/>
<socket-binding name="http" port="8080"/>
+ <socket-binding name="http1" port="8081"/>
+ <socket-binding name="http2" port="8082"/>
<socket-binding name="https" port="8443"/>
<socket-binding name="osgi-http" interface="management" port="8090"/>
<socket-binding name="remoting" port="4447"/>
---standalone/configuration/standalone.xml.orig 1970-01-01 00:00:00.000000000-0100
+++standalone/configuration/standalone.xml 1970-01-01 00:00:00.000000000-0100
@@ -257,9 +257,17 @@
+
+
下面的方法适合我。看一看
首先转到服务器位置,并用新名称复制
默认
文件夹。在我的场景中将其命名为,server\u uat
将conf、lib和server文件夹从default
复制到server\u uat
文件夹中
直接转到jboss service.xml
(位于server\u uat
)
取消注释ServiceBindingManager
mbean
,并将服务器名更改为ports-01
您甚至可以使用ports-02
或ports-03
。JBoss已经在docs/examples/binding manager.xml
文件中完成了所需的配置
将port-01
添加到mbean
代码片段后进行更改后。应该是这样的
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
Linux:
run.bat -c server_uat
./run.sh -c server_uat
供参考:
ports-01 refers 8180
ports-02 refers 8280
ports-03 refers 8380
从第二个JBoss拷贝开始运行两个端口偏移量为100的JBoss拷贝怎么样?这将不必要地增加内存占用,而且不是我们的选项。AS6中也有McAT server.xml,它只是在不同的位置。语法在5和6之间没有更改。但在7中进行了更改。请注意,如果您只需要向web应用程序指示它们正在使用安全连接,那么只需将secure=true
添加到JBoss http连接器即可。这将“欺骗”应用程序,并告诉他们这是一个安全连接,您仍然可以使用nginx代理请求。如果应用程序需要访问客户端信息,例如远程地址等,那么考虑在反向代理和java服务器之间使用AJP协议。还有第三种选择,即基于IP的虚拟主机。在这种情况下,连接器需要绑定到两个不同的IP地址,并且需要使用ipvhosts=“true”,从那时起,一切都与普通虚拟主机相同,只是您还需要添加连接器的IP地址。在我的$JBOSS_HOME
下根本没有服务器
文件夹。以下是我的$JBOSS_HOME
:appclient docs JBOSS-modules.jar standalone bin domain LICENSE.txt version.txt bundles JBossEULA.txt modules欢迎内容,该目录结构看起来像来自AS7。你到底安装了什么?AS 6还是EAP 6?如果是EAP,那么我