目前我有2個web應用程序APP1和APP2在Tomcat 6運行:如何在不同端口後面的單個Tomcat實例上運行不同的應用程序?
我想配置Tomcat,使他們在根上下文中運行的背後獨立端口:
- app1 on http://localhost:8081
- app2 on http://localhost:8082
需要做什麼?
目前我有2個web應用程序APP1和APP2在Tomcat 6運行:如何在不同端口後面的單個Tomcat實例上運行不同的應用程序?
我想配置Tomcat,使他們在根上下文中運行的背後獨立端口:
需要做什麼?
我認爲你可以在你配置那個服務器。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>
上述似乎給日誌更好的結果,但仍有這個錯誤: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
我打算將其標記爲已接受的答案;儘管我不能讓錯誤信息消失,但我至少可以讓Tomcat啓動。如果有人有時間弄清楚,請告訴我們您的結果。另一個選項當然是在這個線程中有兩個Tomcat運行正如其他人指出的那樣。 – DeeStackOverflow 2012-01-12 14:30:28
文檔都在說這裏面具體的服務器每臺發動機都擁有唯一的名稱(http://tomcat.apache.org/tomcat-7.0-doc/config/engine.html),所以我投票給@speeves回答 – Kangur 2014-11-25 17:02:17
我嘗試了鏈接中的建議(基本上添加了一個新的服務和一個連接器)。不工作。我的appBase不是C:\ somepath - 應用程序部署在webapps中。那麼appBase會是什麼? – DeeStackOverflow 2012-01-11 17:14:50
你想在同一個文件夾中有兩個具有相同名稱(ROOT)的應用程序?您需要分隔兩個tomcat服務使用的文件夾。有關詳細信息,請參閱tomcat文檔。 – 2012-01-11 17:23:39
我有像這樣部署的每個應用程序的文件夾:[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
運行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>
我可以修改server.xml以添加2個新端口並將它們指向webapps下的每個應用程序? – DeeStackOverflow 2012-01-11 17:05:02
我們不想創建2個tomcat實例。這裏的人在tomcat和共享庫的同一個實例中運行兩個不同的應用程序。我只想通過分配端口號來進一步擴展它。 – DeeStackOverflow 2012-01-11 17:19:20
而且運行兩個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>
問題是,我沒有安裝apache,也沒有計劃在我們的團隊這樣做。 – DeeStackOverflow 2012-01-11 17:17:44
在以前的職位上,我們直接將Big-Ip F5s運行到tomcat以消除一個失敗點。我_do_愛很多東西雖然:) – speeves 2012-01-11 17:30:36
這在理論上是可能的,但「/」和「/ app1」之間的映射讓你發瘋。通常這種配置也需要「mod_proxy_html」,並且它在安裝和配置方面都非常複雜。 即使你使用的是Apache,在tomcat配置中使用兩個服務仍然是更方便的方法。 – 30thh 2012-09-18 07:31:57
加入連接器的另一實例: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.)
來自建議閱讀整個主題,因爲它討論了使用此配置的性能命中,以及可能的競爭條件。
這幫了我。非常好:) – rocksteady 2016-05-30 10:47:50
這個答案最適合我,因爲我想單獨設置一組日誌,單獨的Catalina/localhost/* .xml上下文,單獨的appBase。我dded一個
我不認爲這是不可能的,除非你有另一個實例,我已經upvoted,讓我們看看是否有任何其他的想法。 – kosa 2012-01-11 17:01:09
我真的只想使用一個tomcat實例。我們的團隊都在嘗試使用單個實例。 server.xml中有些東西需要更改,但我不知道該怎麼做。 – DeeStackOverflow 2012-01-11 17:03:28