2009-11-19 68 views
3

好吧,所以我一直在這方面工作一段時間,並一直在尋找,但到目前爲止,我還沒有找到任何答案,實際上回答我想知道的。我有一點在我的繩索末端,但我希望我能在不久的將來找到答案。將Apache鏈接到Tomcat與多個域

所以我安裝了Apache 2並提供了標準的網頁,但我也有鏈接到當前支持的我的域之一的Tomcat實例。但是,我想通過Apache向服務器添加另一個域,該域指向我已有的一個單獨的代碼庫。我從幾個不同的角度談到了這一點,並且我確定我只是不知道如何設置這些服務器來真正做我想做的事情。

我的服務器上的一些信息: 目前Apache 2運行一個Tomcat5.5實例,使用mod_jk將它們連接在一起。

我在workers.properties中有一個worker,它將「host」字段指向「localhost」,使用正確的端口Tomcat實例,這樣一切正常。

在我的Tomcat server.xml文件中,我有一臺主機定義爲「本地主機」,指向我的webapp,目前我正在提供服務,並將該主機設置爲defaultHost。

我想過的一個想法是,我可以添加一個新的工作者與不同於「本地主機」(即host2)的主機,然後在我的server.xml文件中定義一個名爲「host2」的新主機以匹配它,在互聯網上閱讀一些內容,似乎工作者的「主機」必須指向一個服務器,而不是Tomcat實例中的主機名,這是正確的嗎?

再一次,我想要一個簡單的概要: 安裝在apache/tomcat組合中,使www.domain1.com指向「webapp1」,www.domain2.com指向「webapp2」。

+0

想法不在我頭頂:使用mod_proxy代替mod_jk,在Apache配置中設置虛擬服務器,或者代理到不同的Tomcat實例,或者使用mod_rewrite/mod_proxy將請求代理到Tomcat服務器上的不同URL。 – 2009-11-19 18:32:58

+0

關於mod_proxy,Tomcat連接器FAQ(http://wiki.apache.org/tomcat/FAQ/Connectors)寫道:** mod_jk [...]應該用於生產。** mod_proxy。一種便宜的代理方式,無需配置JK的麻煩。該解決方案缺乏粘性會話負載平衡。如果你不需要jk的一些功能 - 這是一個非常簡單的選擇。 – 2009-11-19 21:16:13

+0

mod_proxy_balancer支持貼圖會話負載平衡,我知道,因爲我已經看到它在上個星期在我們的組織中配置和工作。請注意,必須爲每個Tomcat實例設置一個'jvmroute'。 (見http://www.wellho.net/archives/2009/10/load_balancing_2.html) – 2009-11-20 10:01:11

回答

9

首先,爲這兩個webapps設置mod_jk workers。下面的樣本workers.properties

 
workers.tomcat_home=/usr/local/tomcat/apache-tomcat-6.0.20 
workers.java_home=/usr/lib/jvm/java-6-sun 
ps=/ 
worker.list=worker1,worker2 
worker.worker1.type=ajp13 
worker.worker1.host=www.domain1.com 
worker.worker1.port=8009 
worker.worker2.type=ajp13 
worker.worker2.host=www.domain2.com 
worker.worker2.port=8009 

然後,設置在Apache虛擬主機:

<VirtualHost *:80> 
    ServerName www.domain1.com 
    JkMount /* worker1 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.domain2.com 
    JkMount /* worker2 
</VirtualHost> 

確保server.xml包含註釋掉AJP連接器端口8009(工人端口匹配)。像這樣:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

最後,配置tomcat主機。類似這樣的:

<Host name="www.domain1.com" 
    appBase="/path/to/domain1" 
    unpackWARs="true" 
    autoDeploy="true" 
    xmlValidation="false" 
    xmlNamespaceAware="false"> 

<Host name="www.domain2.com" 
    appBase="/path/to/domain2" 
    unpackWARs="true" 
    autoDeploy="true" 
    xmlValidation="false" 
    xmlNamespaceAware="false"> 

您可能需要做一些改編,但它應該接近最終結果。