Как запускать различные приложения на одном JBoss в качестве экземпляра 6 за разными портами?

Я иду от это так однако мой случай не на Tomcat, а JBoss EAP 6. Предположим, у меня есть два веб-приложения app1 и app2, работающих на JBoss как 6:

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

однако я хочу настроить Tomcat так, чтобы они работали в корневом контексте за отдельными портами:

  • app1 on http://localhost:8081
  • app2 on http://localhost:8082

как я могу это сделать С JBoss ВП 6? Примечание ответ не работает для меня, поскольку он нацелен на JBoss 5.

3 ответов


EDIT: эти инструкции предназначены для 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 для определения их. Но, если вам не нужно управлять портами через пользовательский интерфейс управления, это будет перебор.

отправка запросов на порт 8081 в app1 и порт 8082 в app2

это намного сложнее. JBoss использует собственный движок Tomcat это не поддерживает несколько корней webapp (атрибут appBase не работает). Таким образом, невозможно настроить два разных каталога для вашего разъема. Можно добавлять виртуальные хосты и использовать jboss-web.xml в каждом приложении, чтобы настроить, какой vhost он отвечает, но это означает, что вы должны использовать разные имена в URL-адресе клиента.

у вас есть два варианта здесь.

Вариант 1: Jboss RewriteValve

добавить в Host элемент конфигурации (до другие определения клапанов) в $JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml

 <Valve className="org.jboss.web.rewrite.RewriteValve" />

создайте файл $JBOSS_HOME/server/default/conf/jboss.web/localhost/rewrite.properties следующего содержания:

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

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

Примечание: вам может потребоваться создать $JBOSS_HOME/server/default/conf/jboss.web/localhost/ каталог, он не существует по умолчанию.

примечание 2: Расположение rewrite.properties зависит от размещения Valve tag in server.xml. Наиболее интуитивное размещение с другими Valve элементы. Однако он действителен непосредственно под Engine как хорошо. В этом случае rewrite.properties файл должен переместитесь на один каталог.

Вариант 2: фильтр сервлетов в корневом контексте

разверните фильтр сервлетов в $JBOSS_HOME/server/default/deploy/ROOT.war/ который отправляет запросы на основе входящего порта. Вы можете либо развернуть свою собственную реализацию фильтра, либо использовать UrlRewriteFilter с конфигурацией, которая выглядит так:

<rule>
  <condition type="port">8081</condition>
  <from>/(.*)</from>
  <to context="app1">/</to>
</rule>

<rule>
  <condition type="port">8082</condition>
  <from>/(.*)</from>
  <to context="app2">/</to>
</rule>

посмотреть также:

EDIT: учитывая сложность конфигурации 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/" flags="L">
+                    <condition test="%{SERVER_PORT}" pattern="=8081" flags=","/>
+                </rewrite>
+                <rewrite pattern="^/(.*)$" substitution="/app2/" 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 и сервер С default на server_uat папка.

прямое jboss-service.xml (который находится в server_uat)

раскомментировать ServiceBindingManager mbean и измените имя сервера на ports-01.

вы даже можете использовать ports-02 или ports-03. Необходимые конфигурации уже сделаны JBoss в .

как только изменение будет сделано после добавления ports-01 to 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 экземпляр сервера со следующим команда.

Windows:

run.bat -c server_uat

Linux:

./run.sh -c server_uat

к твоему сведению!--25-->:

ports-01 refers 8180

ports-02 refers 8280

ports-03 refers 8380