5

WildFly 8.1.0 最终版 Windows Server 2012 R2

我有两个指向此服务器的子域,我希望对每个子域的请求触发不同的战争文件:-

webapp.domain1.com -> WildFly Server -> myapp1.war
test.domain2.net -> WildFly Server -> myapp2.war

我的standalone.xml 文件目前根据在 JBoss 开发者网站上收到的建议配置如下:-

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
  <buffer-cache name="default"/>

  <server name="default-server">
    <http-listener name="default" socket-binding="http"/>

    <host name="default-host" default-web-module="myapp1.war" alias="webapp.domain1.com"/>
    <host name="other-host" default-web-module="myapp2.war" alias="test.domain2.net"/>
  </server>

  <servlet-container name="default">
    <jsp-config/>
  </servlet-container>

  <filters>
    <response-header name="server-header" header-value="WildFly/8" header-name="Server"/>
    <response-header name="x-powered-by-header" header-value="Undertow/1" header-name="X-Powered-By"/>
  </filters>
</subsystem>

将浏览器指向 webapp.domain1.com 或 test.domain2.net 会导致请求按预期发送到 WildFly 服务器,但在这两种情况下都会触发相同的 war 文件 (myapp1.war)。

如下切换 <host .../> 元素的“名称”值会导致 myapp2.war 被调用,无论使用哪个 URL:-

    <host name="other-host" default-web-module="myapp1.war" alias="webapp.domain1.com"/>
    <host name="default-host" default-web-module="myapp2.war" alias="test.domain2.net"/>

看起来 Undertow 只处理“默认主机”条目的详细信息。

请问这里有人可以帮忙吗?

如果做不到这一点,有谁知道 WildFly 是否(以及如何)可以与 Apache Web Server 一起使用?

4

3 回答 3

12

This is a bug in current undertow subsystem implementation. It only properly processes default-web-module for default host and doesn't even take it into account for non default hosts.

I created https://issues.jboss.org/browse/WFLY-3639 to track & fix it.

as a workaround until this is fixed add

jboss-web.xml to WEB-INF of your myapp2.war

with content:

<jboss-web>
    <virtual-host>other-host</virtual-host>
    <context-root>/</context-root>
</jboss-web>

which will tell server to what host & context root it should be bound to.

于 2014-07-17T23:13:19.690 回答
1

我在 Ubuntu 14.04 上使用 WildFly 8.1.0.Final 和 Firefox 30 测试了与您类似的设置,对我来说,在WEB-INF/jboss-web.xml我的战争中添加一个之后它就可以工作:

<jboss-web>
    <virtual-host>other-host</virtual-host>
</jboss-web>

我在 /etc/hosts 中为同一个 IP 定义了两个不同的主机别名,并且我的浏览器按预期重定向到不同的 Web 应用http://alias1:8080程序http://alias2:8080

于 2014-07-17T17:58:43.747 回答
-2

default-host 是在传入请求没有 Host: 标头时将使用的虚拟主机。因此,要将请求发送到您的其他服务器,客户端发送的请求应在请求标头中包含“主机:其他主机”。

来自客户端的示例 HTTP 请求如下所示,

GET /Some/Resource HTTP/1.1
Accept: ....
Host: other-host
....
....

看看这是否有效。

于 2014-07-17T14:55:03.307 回答