2012-01-11 111 views
50

目前我有2個web應用程序APP1和APP2在Tomcat 6運行:如何在不同端口後面的單個Tomcat實例上運行不同的應用程序?

我想配置Tomcat,使他們在根上下文中運行的背後獨立端口:

需要做什麼?

+0

我不認爲這是不可能的,除非你有另一個實例,我已經upvoted,讓我們看看是否有任何其他的想法。 – kosa 2012-01-11 17:01:09

+0

我真的只想使用一個tomcat實例。我們的團隊都在嘗試使用單個實例。 server.xml中有些東西需要更改,但我不知道該怎麼做。 – DeeStackOverflow 2012-01-11 17:03:28

回答

43

我認爲你可以在你配置那個服務器。XML文件,並把2個服務:

<Service name="app1"> 
    <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Host name="localhost" appBase="app1" 
     unpackWARs="true" autoDeploy="true"> 
     </Host> 
    </Engine> 
</Service> 
<Service name="app2"> 
    <Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
    <Engine name="Catalina" defaultHost="localhost"> 
     <Host name="localhost" appBase="app2" 
     unpackWARs="true" autoDeploy="true"> 
     </Host> 
    </Engine> 
</Service> 
+0

上述似乎給日誌更好的結果,但仍有這個錯誤:2012年1月11日下午12時58分13秒org.apache.catalina.core.StandardContext resourcesStart SEVERE:錯誤開始靜態資源 java.lang.IllegalArgumentException:文檔庫C:\ Program Files \ Tomcat6 \ app1 \ host-manager不存在或不可讀目錄 \t at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext。 java:142) – DeeStackOverflow 2012-01-11 18:02:09

+0

我打算將其標記爲已接受的答案;儘管我不能讓錯誤信息消失,但我至少可以讓Tomcat啓動。如果有人有時間弄清楚,請告訴我們您的結果。另一個選項當然是在這個線程中有兩個Tomcat運行正如其他人指出的那樣。 – DeeStackOverflow 2012-01-12 14:30:28

+1

文檔都在說這裏面具體的服務器每臺發動機都擁有唯一的名稱(http://tomcat.apache.org/tomcat-7.0-doc/config/engine.html),所以我投票給@speeves回答 – Kangur 2014-11-25 17:02:17

0

使用兩個不同的Tomcat實例。

編輯:

或配置Tomcat作爲這個問題的答案解釋:Tomcat configuration help: multiple ports not responding

+0

我嘗試了鏈接中的建議(基本上添加了一個新的服務和一個連接器)。不工作。我的appBase不是C:\ somepath - 應用程序部署在webapps中。那麼appBase會是什麼? – DeeStackOverflow 2012-01-11 17:14:50

+0

你想在同一個文件夾中有兩個具有相同名稱(ROOT)的應用程序?您需要分隔兩個tomcat服務使用的文件夾。有關詳細信息,請參閱tomcat文檔。 – 2012-01-11 17:23:39

+0

我有像這樣部署的每個應用程序的文件夾:[tomcathome]/webapps/app1和[tomcathome]/webapps/app2。默認的server.xml允許我將它們稱爲localhost:8080/app1和localhost:8080/app2。我已將appconfig.xml作爲app1.xml複製到[tomcathome]/conf/Catalina/localhost中。 – DeeStackOverflow 2012-01-11 17:36:07

0

運行Tomcat在指定的端口:

$CATALINA_HOME/conf/server.xml 

由於JB Nizet寫道,設置兩個不同的tomcat的實例,並適當地配置端口值server.xml。

$ CATALINA_HOME/Tomcat的8081/conf目錄/ server.xml中:

<?xml version='1.0' encoding='utf-8'?> 
<Server port="8081" ... > 
    ... 
</Server> 

$ CATALINA_HOME/Tomcat的8082/conf目錄/ server.xml中:

<?xml version='1.0' encoding='utf-8'?> 
<Server port="8082" ... > 
    ... 
</Server> 
+0

我可以修改server.xml以添加2個新端口並將它們指向webapps下的每個應用程序? – DeeStackOverflow 2012-01-11 17:05:02

+0

我們不想創建2個tomcat實例。這裏的人在tomcat和共享庫的同一個實例中運行兩個不同的應用程序。我只想通過分配端口號來進一步擴展它。 – DeeStackOverflow 2012-01-11 17:19:20

2

而且運行兩個Tomcat實例和使用ROOT應用程序(已經說過了,並且有點差和無效的解決方案),你可以通過使用Apache + Tomcat來實現它。配置apache監聽兩個端口並通過IP轉發:端口到不同的Tomcat應用程序。但是你需要一個不同的port tomcat!

Apache配置

listen 8080,8081 
... 
<VirtualHost *:8080> 
    ServerName localhost 
    ProxyPass/http://localhost:8888/app1 
    ProxyPassReverse/http://localhost:8080/app1 
</VirtualHost> 

<VirtualHost *:8081> 
    ServerName localhost 
    ProxyPass/http://localhost:8888/app2 
    ProxyPassReverse/http://localhost:8080/app2 
</VirtualHost> 

listen 80,81 
... 
<VirtualHost *:80> 
    ServerName localhost 
    ProxyPass/http://localhost:8080/app1 
    ProxyPassReverse/http://localhost:8080/app1 
</VirtualHost> 

<VirtualHost *:81> 
    ServerName localhost 
    ProxyPass/http://localhost:8080/app2 
    ProxyPassReverse/http://localhost:8080/app2 
</VirtualHost> 
+0

問題是,我沒有安裝apache,也沒有計劃在我們的團隊這樣做。 – DeeStackOverflow 2012-01-11 17:17:44

+0

在以前的職位上,我們直接將Big-Ip F5s運行到tomcat以消除一個失敗點。我_do_愛很多東西雖然:) – speeves 2012-01-11 17:30:36

+1

這在理論上是可能的,但「/」和「/ app1」之間的映射讓你發瘋。通常這種配置也需要「mod_proxy_html」,並且它在安裝和配置方面都非常複雜。 即使你使用的是Apache,在tomcat配置中使用兩個服務仍然是更方便的方法。 – 30thh 2012-09-18 07:31:57

8

加入連接器的另一實例:http://www.coderanch.com/t/84172/Tomcat/listen-multiple-ports

I R:

<Service name="reciver"> 
    <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="10" 
       enableLookups="false" acceptCount="100" 
       connectionTimeout="10000" disableUploadTimeout="true" 
       useBodyEncodingForURI="true"/> 
    <Engine name="reciver" defaultHost="localhost" jvmRoute="host1"> 
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
        resourceName="UserDatabase" /> 
      <Host name="localhost" appBase="webapps" unpackWARs="true" 
        autoDeploy="false" xmlValidation="false" 
        xmlNamespaceAware="false"> 
        <Context docBase="browser" path="/browser" reloadable="false"/> 
      </Host> 
    </Engine> 
</Service> 
<Service name="reciver2"> 
    <Connector port="8081" maxHttpHeaderSize="8192" maxThreads="10" 
       enableLookups="false" acceptCount="1" 
       connectionTimeout="10000" disableUploadTimeout="true" 
       useBodyEncodingForURI="true" proxyName="example.pt" proxyPort="80"/> 
    <Engine name="reciver2" defaultHost="example_app" jvmRoute="host2"> 
      <Host name="example_app" appBase="test_app/example_app" unpackWARs="true" 
        autoDeploy="false" xmlValidation="false" 
        xmlNamespaceAware="false"> 
        <Context docBase="example_app" path="/example_app" reloadable="false"/> 
      </Host> 
    </Engine> 
</Service> 
(...Repeted 2 more times.) 

來自建議閱讀整個主題,因爲它討論了使用此配置的性能命中,以及可能的競爭條件。

+0

這幫了我。非常好:) – rocksteady 2016-05-30 10:47:50

+1

這個答案最適合我,因爲我想單獨設置一組日誌,單獨的Catalina/localhost/* .xml上下文,單獨的appBase。我dded一個獲得單獨的日誌 – djb 2016-08-09 01:32:49

相關問題