Назад | Перейти на главную страницу

Как настроить виртуальный хостинг Jetty 6 и Jboss 4.0.5?

У меня есть 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>

(Конечно, измените имена файлов и пути по мере необходимости)