Как запускать различные приложения на одном 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 имеет другой синтаксис файла конфигурации.
ваша проблема состоит из двух частей:
- сделать JBoss слушать на нескольких портах
- отправка запросов на 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>
посмотреть также:
- https://community.jboss.org/wiki/VirtualHostsWithJBossAS
- http://docs.jboss.org/jbossweb/3.0.x/rewrite.html
- как использовать фильтр сервлетов в Java для изменения url-адреса входящего запроса сервлета?
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