У меня есть 2 веб-приложения, развернутых на одном сервере JBoss / Jetty. В Jetty 5.1.14 у меня был следующий файл jetty-web.xml, который настраивал одно из приложений для работы в качестве виртуального хоста (на том же порту):
<Configure class="org.jboss.jetty.JBossWebApplicationContext">
<Call name="addVirtualHost"><Arg>app2.localhost.com</Arg></Call>
</Configure>
Это сработало отлично. К сожалению, с Jetty 6.1.17 это совсем не работает. Во-первых, «JBossWebApplicationContext», кажется, теперь называется «JBossWebAppContext», а во-вторых, документация, которую я смог найти, предполагает, что я должен использовать jetty-web.xml, который выглядит следующим образом:
<Configure class="org.jboss.jetty.JBossWebAppContext">
<Set name="VirtualHosts">
<Array type="java.lang.String">
<Item>app2.localhost.com</Item>
</Array>
</Set>
</Configure>
Но это тоже не работает. Два веб-приложения развертываются без ошибок, но когда я пытаюсь получить доступ ко второму приложению под виртуальным именем хоста, вместо этого он просто обращается к первому приложению. Оба приложения находятся в корневом контексте (это не подлежит обсуждению).
Как заставить работать виртуальные хосты?
Я решил проблему до сих пор, используя этот синтаксис:
<Configure class="org.jboss.jetty.JBossWebAppContext">
<Set name="VirtualHosts">
<Array type="java.lang.String">
<Item>host1.domain.com</Item>
<Item>host2.domain.com</Item>
</Array>
</Set>
</Configure>
Проблема оказалась в том, что ВСЕМ веб-приложениям нужны определенные виртуальные хосты, если они работают в одном контейнере. Почему-то развернуть одну WAR с виртуальными хостами и одну без них не получилось. Это отлично работало в Jetty 5, поэтому я озадачен, однако определение файлов виртуальных хостов для всех приложений, которым это нужно, не будет проблемой.
Вы можете увидеть, работает ли это для вас:
<New class="org.jboss.jetty.JBossWebAppContext">
<Arg><Ref id="Contexts"/></Arg>
<Arg><SystemProperty name="jetty.home"/>/webapps/app1.war</Arg>
<Arg>/</Arg>
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
<Set name="VirtualHosts">
<Array type="java.lang.String">
<Item>app1.localhost.com</Item>
</Array>
</Set>
</New>
<New class="org.jboss.jetty.JBossWebAppContext">
<Arg><Ref id="Contexts"/></Arg>
<Arg><SystemProperty name="jetty.home"/>/webapps/app2.war</Arg>
<Arg>/</Arg>
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
<Set name="VirtualHosts">
<Array type="java.lang.String">
<Item>app2.localhost.com</Item>
</Array>
</Set>
</New>
(Конечно, измените имена файлов и пути по мере необходимости)