簡體   English   中英

如何在不同端口后面的單個JBoss AS 6實例上運行不同的應用程序?

[英]How to run different apps on single JBoss AS 6 instance behind different ports?

我來自這個SO然而我的情況不是在Tomcat上,而是JBoss EAP 6.所以假設我在JBoss AS 6上運行了兩個web應用程序app1和app2:

  • http://localhost:8080/app1
  • http://localhost:8080/app2

但是,我想配置Tomcat,以便它們在不同端口后面的根上下文中運行:

  • http://localhost:8081上的app1
  • http://localhost:8082上的app2

如何在JBoss EAP 6上實現? 請注意, 這個答案對我不起作用,因為它針對的是JBoss 5。

編輯:這些說明適用於原始問題中要求的JBoss AS6。 AS7具有不同的配置文件語法。

你的問題有兩個部分:

  1. 讓JBoss監聽多個端口
  2. 將請求發送到8081到app1和8082到app2

讓JBoss監聽多個端口

這個很容易。

將這些行添加到$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管理端口,否則將是一種過度殺傷力。

將請求發送到端口8081到app1和端口8082到app2

這要困難得多。 JBoss使用自己的Tomcat引擎,它不支持多個webapp根(appBase屬性不起作用)。 因此,無法為連接器配置兩個不同的目錄。 可以添加虛擬主機並在每個應用程序中使用jboss-web.xml來配置它響應的vhost,但這意味着您必須在客戶端URL-s中使用不同的名稱。

你有兩個選擇。

選項1:JBoss RewriteValve

$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

RewriteCond %{SERVER_PORT}  =8081
RewriteRule ^/(.*)$  /app1/$1 [L]

RewriteCond %{SERVER_PORT}  =8082
RewriteRule ^/(.*)$  /app2/$1 [L]

注意:您可能需要創建$JBOSS_HOME/server/default/conf/jboss.web/localhost/目錄,默認情況下它不存在。

注意2: rewrite.properties的位置取決於server.xml Valve標記的位置。 最直觀的位置是其他Valve元素。 但是它也直接在Engine下有效。 在這種情況下,需要將rewrite.properties文件向上移動一個目錄。

選項2:ROOT上下文中的Servlet過濾器

將servlet過濾器部署到$JBOSS_HOME/server/default/deploy/ROOT.war/ ,根據傳入端口調度請求。 您可以推出自己的自定義過濾器實現,也可以使用UrlRewriteFilter ,其配置如下所示:

<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的反向代理。

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"/>

也可以看看:

以下方式為我解決了。 看一看。

首先轉到服務器位置並使用新名稱復制default文件夾。 在我的場景中,它將命名為server_uat

conf,lib和server文件夾從default復制到server_uat文件夾。

直接到jboss-service.xml (在server_uat

取消注釋ServiceBindingManager mbean並將ServerName更改為ports-01

您甚至可以使用ports-02ports-03 所需的配置已由JBoss在docs/examples/binding-manager.xml文件中完成。

在將ports-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>

使用命令提示符,指向bin文件夾並使用以下命令運行server_uat服務器實例。

視窗:

run.bat -c server_uat

Linux的:

./run.sh -c server_uat

僅供參考

ports-01 refers 8180

ports-02 refers 8280

ports-03 refers 8380

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM