Tomcat 多埠,多虛擬主機配置方法
Tomcat多使用在開發環境裡,但有時也做生產環境。在生產環境下多會碰到,需要在一個tomcat下放置多個站點的情況。有時還需要同時開啟多個不同的埠,接受多個域名請求的情況。通常這種情況會開啟多個tomcat例項。這種方法有如下利弊:
優點:1.每個站點相互獨立,互相不受干擾。不會因為一個站點繁忙導致,其它站點受影響。
2.可以對tomcat,做高度自定義。當需要做一些對容器不安全的情況下。為保證其它站點不受影響,可以使用這種情況。如:需要開啟自定義執行緒。
缺點:1.浪費系統資源。雖然tomcat佔用系統資源很少,但例項過多浪費還是很嚴重的。由於tomcat有記憶體溢位的問題,需要改大記憶體,而這樣導致了系統資源的大量浪費。
2.管理不方便,無論是調優,還是日常的啟動,關閉,埠管理。雖然Linux下很多命令很方便,但還是很麻煩。
我曾經發現有的伺服器上,最多部署過6個tomcat,記憶體的浪費可想而知了...
有時真的很羨慕windows上的IIS,我想沒幾個見過一臺windows上跑多個IIS吧?所以我認真的花時間研究了一下,tomcat配置,實際上tomcat支援多埠,多虛擬目錄的情況,多個服務的方式,可見tomcat配置很靈活。需要修改conf/server.xml
首先是讓tomcat監聽多個埠:
Xml程式碼-
<Connector
- connectionTimeout="20000"
- redirectPort="8443" />
- <Connector port="8082" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
只需填加一個Connector就可以了。
但這種方法有一個缺點是,兩個埠處理的東西是一樣的,也就是訪問8081和8082的內容是一樣的。這種適合需要使用指定模個埠的情況。
接下來是讓tomcat,一個為不同域名服務。
Xml程式碼- <Engine name="Catalina" defaultHost="localhost">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
- resourceName="UserDatabase"/>
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- <Host name="www.java.com" appBase="webapps2"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- </Engine>
只需填加一個Host就可以了,appBase需要使用另外一個目錄。這樣不同域名,訪問不同目錄。
最後,我們可能希望,Tomcat可以使用不同IP,訪問不同目錄。除了程序是一個,其它跟倆個例項一樣。這個xml比較多,只列出需要的部分。
Xml程式碼- <Service name="Catalina2">
- <Connector port="8082" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- <Engine name="Catalina2" defaultHost="localhost">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
- resourceName="UserDatabase"/>
- <Host name="localhost" appBase="webapps2"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- </Engine>
- </Service>
上面是需要新增到xml裡面的。就是添加了一個Service。Service name, Engine name,host appBase都需要修改。這樣就可以一個tomcat完成倆個例項工作了。