2011-07-08 23 views
3

我使用apache web服務器和tomcat服務器來承載幾個web應用程序。我們可以指向多個網址tomcat中的同一個webapp

這些web應用程序彼此沒有太大區別,我想將所有這些web應用程序整合到一個web應用程序中,以儘量減少過程開銷。

當前Web應用程序正在使用單獨的URL訪問,例如:localhost:8080/webapp1,localhost:8080/webapp2。

沒有改變網址是否有一種方式,我可以在tomcat上託管一個web應用程序說「singlewebapp」,這樣它會響應localhost:8080/webapp1以及localhost:8080/webapp2?

+1

如果Apache是​​你的堆棧的一部分,就可以實現上述使用重寫規則。 – opyate

+0

@opyate:+1。你是對的。 Kunkunur,相信我這會導致日常操作中的混亂。如果在上下文根後面存在命名空間衝突,例如/ wa1/myservlet和/ wa2/myservlet ...你是什麼意思**過程開銷**?您提出的解決方案不會整合Web應用程序,相反會引入更多的複雜性。 – home

+0

@home:webapp1和webapp2實際上是相同的唯一區別是圖像,css文件,配置文件和一些設置。本質上,代碼(包括servlet)是相同的。我應該把這個問題命名爲多租戶/白標籤。通過流程開銷,我意味着部署過程的開銷,團隊每天都在管理這些應用程序。 – sandeepkunkunuru

回答

4

我的一個團隊成員的建議對symlinksjunctions這引發在Apache Tomcat的docbase功能的討論一個想法,我們發現了一個非常優雅的答案,在它這個問題。

假設Web應用程序是abc.war。我們在Tomcat的webapps部署abc.war爲abc文件夾,然後我們需要配置Tomcat的在server.xml如下,並重新啓動Tomcat:

<Host ...> 
    ... 
    <Context path="/webapp1" docBase="/abc" /> 
    <Context path="/webapp2" docBase="/abc" /> 
</Host> 

相信這是支持白色標籤和多租戶非常有用的用法。

+0

您可能想要注意,docBase也可以與包含主機的應用程序庫相關。因此,在默認情況下,Host的應用程序庫將是webapps - 如果您有abc.war,那麼您需要刪除/ abc中的/才能使其工作。 –

0

我不認爲你可以這樣做。看起來您的主機名和所有應用程序的端口是相同的,但上下文根(webapp1和webapp2)不同。我們不能讓sinlgle上下文根訪問具有相同主機名和端口的多核應用程序。

每個Web服務器都可以在一個端口和主機組合上運行一個應用程序。如果你想在同一個主機上運行多個應用程序,顯然你需要添加儘可能多的虛擬IP,並且應該在你的web服務器的.config文件中進行配置,以使虛擬應用程序可以被訪問。

我們可以在基於IP地址的Web服務器上創建虛擬服務器(您需要研究的軟件和硬件虛擬服務器概念)。要在單臺服務器上有多個IP地址,您需要添加儘可能多的以太網卡,以虛擬擴展IP數量。

如果你很好地使用虛擬服務器的概念,你需要稍微改變你的需求。

0

而不是編輯server.xml在tomcat的catalina的本地主機(或您的主機)上創建context.xml。因爲如果編輯server.xml我們需要重啓服務器。

創作的context.xml的:

  1. XML文件名必須是你的路徑名I,E webapp1/webapp2的XML格式

  2. 數據如下(如果要創建爲ABC路徑。戰爭檔案)

    a)。 xml文件名是webapp1.xml b)。 xml文件名是webapp2。XML

    "lessthan symbol" ?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    "lessthan symbol" Context reloadable="true" privileged="true" docBase="${catalina.home}/abc" crossContext="true" antiResourceLocking="false" allowLinks="true"/> 
    

上面的XML文件必須在tomacat/conf目錄的地方/卡塔利娜//

相關問題