使用相同的端口运行多个java jetty实例(80)

时间:2012-08-29 18:41:59

标签: java webserver jetty subdomain virtualhost

例如:

我有一个主要的临时域名

www.product.com

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

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

(纠正我,如果我错了)我知道如果我启动jetty实例,每个将从单独的端口no'开始

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中运行jetty app

更新

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

1 个答案:

答案 0 :(得分:7)

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

  <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>

检查this page以获取有关如何配置此内容的更多信息。

或者,如果你真的想拥有多个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 docs了解详情。