Вот как я это сделал, и я также настроил разные SSL-сертификаты для каждого сайта (не показано).Я не претендую на понимание всего, что знаю, но это работает для меня в нескольких инсталляциях.Вам нужен файл "jetty.xml" и файл "contexts.xml" для каждого экземпляра.
Предположим, что Jetty установлен в /opt/Jetty...
Запустите два экземпляра серверассылка на две версии файла jetty.xml (это можно сделать в одном скрипте, как показано, или в двух отдельных скриптах запуска)
start.sh ...
cd /opt/Jetty
java -jar start.jar etc/jetty.xml etc/jetty2.xml
Если выИмея сервер с несколькими ip, вы можете использовать файлы context.xml, чтобы указывать разные ip или имена хостов в разделе соединителя каждого файла jetty.xml.Если у вас есть только один ip, то вы будете использовать настройку пути контекста в контексте xml, чтобы различать два экземпляра.
в файле jetty.xml, см. ip или host , икаталог , который будет содержать context.xml для 1-го экземпляра:
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="host">HOST OR IP FOR FIRST INSTANCE</Set>
<Set name="port"><SystemProperty name="jetty.port" default="80"/></Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.ContextDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts/directory_for_FIRST_instance</Set>
<Set name="scanInterval">5</Set>
</New>
</Arg>
</Call>
в файле jetty.xml, обратитесь к ip или хосту и каталог, который содержит context.xml для 2-го экземпляра:
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="host">HOST OR IP FOR SECOND INSTANCE</Set>
<Set name="port"><SystemProperty name="jetty.port" default="80"/></Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">443</Set>
<Set name="lowResourcesConnections">5000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.ContextDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts/directory_for_SECOND_instance</Set>
<Set name="scanInterval">5</Set>
</New>
</Arg>
</Call>
Если определено, как показано выше, вы можете перезагрузить файл war и перезапустить приложение, коснувшись файла context xml.
Поместите отдельные файлы контекста в отдельные подкаталоги каталога контекста, каждый из которых указывает на один и тот же файл war, но с разными путями контекста и разными виртуальными хостами.
/ opt / Jetty/contexts/subdirectory_for_first_instance/context_first.xml
/opt/Jetty/contexts/subdirectory_for_second_instance/context_second.xml
в context_first.xml - вы можете указать этот узел (например,)Ссылка на ваше первое приложение
<Set name="contextPath">/firstapp</Set>
в context_second.xml - вы можете указать узел (firstapp), который всегда будет ссылаться на ваше второе приложение
<Set name="contextPath">/secondapp</Set>
(выше необходимо(два разных пути к контексту), если вы хотите запустить их с одного и того же ip, я считаю)
Затем определите два виртуальных хоста (должны отобразить URL, который используется браузером) в отдельных файлах контекста:
В context_first.xml:
<Set name="virtualHosts">
<Array type="String">
<Item>www.my_first_app.com</Item>
</Array>
</Set>
И в context_second.xml
<Set name="virtualHosts">
<Array type="String">
<Item>www.my_second_app.com</Item>
</Array>
</Set>
Примечание: если у вас два имени ip или хоста, вы можете установить путь к контексту:оба приложения в "/"
, если у вас только один ip, путь к контексту будет определять, к какому приложению осуществляется доступ
Кроме того, и, что важно, вы можете отправлять параметры контекста в ваше приложение, чтобы он мог определить, какойэкземпляр, если необходимо.
Пример параметров контекста для отправки уникальных значений каждому экземпляру:
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- Custom context configuration -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<Set name="initParams">
<New class="java.util.HashMap">
<Put name="customer">Joes Fish Store</Put>
<Put name="ShowPanelNames">N</Put>
<Put name="FiscalYearStartMonth">10</Put>
<Put name="LiveEmail">Y</Put>
</New>
</Set>