7

例如:

我有一个主临时域

www.product.com

对于每个客户端,我需要将单独的子域映射到具有相同端口(80)但具有不同实例名称(不同的 .wars 文件)的同一服务器

www.client1.product.com
www.client2.product.com
www.clientn.product.com

(如果我错了,请纠正我)据我所知,如果我启动码头实例,每个实例都将从单独的端口号开始

client1 war will start at port 3001
client2 war  will start at port 3002
client3 war will start at port 3003

我的问题是如何将端口 80 的所有实例映射到适当的相同子域

如果我访问

www.client4.product.com,我需要让码头应用程序在 3004 端口运行

更新:

为了更好地了解我的架构,如果在 3002 端口上运行的 client2 jetty 实例由于运行时异常或内存泄漏或手动重启而进入 down 状态,则所有其他 jetty 实例都独立运行(类似于 google appengine 背后的架构使用 jetty)

4

1 回答 1

8

为此,请勿运行多个 Jetty 实例。使用多个 VirtualHost 运行一个实例。为此,您可以像这样配置码头:

  <Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="war"><SystemProperty name="jetty.home"/>/webapps/client1.war</Set>
    <Set name="contextPath">/</Set>
    <Set name="virtualHosts">
      <Array type="java.lang.String">
        <Item>www.client1.product.com</Item>      
      </Array>
    </Set>
</Configure>
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="war"><SystemProperty name="jetty.home"/>/webapps/client2.war</Set>
  <Set name="contextPath">/</Set>
  <Set name="virtualHosts">
    <Array type="java.lang.String">
      <Item>www.client2.product.com</Item>      
    </Array>
  </Set>
</Configure>

查看此页面以获取有关如何配置它的更多信息。

或者,如果你真的想拥有多个 Jetty 实例,你可以在它前面使用另一个服务器,比如 Apache,它充当反向代理。然后可以通过编辑 httpd.conf 为 Apache 设置虚拟主机:

<VirtualHost *:80>
     ServerName www.client1.product.com
     ProxyRequests off
     ProxyPass / http://someInternalHost:3001/
     ProxyPassReverse / http://someInternalHost:3001/
</VirtualHost>

<VirtualHost *:80>
     ServerName www.client2.product.com
     ProxyRequests off
     ProxyPass / http://someInternalHost:3001/
     ProxyPassReverse / http://someInternalHost:3001/
</VirtualHost>

您可以查看apache 文档以获取更多信息。

于 2012-08-29T18:48:34.193 回答