通過配置tmcat的server.xml來實現多端口多應用:
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8" enableLookups="false" acceptCount="500" connectionTimeout="5000" disableUploadTimeout="true" maxThreads="1500" maxSpareThreads="50" minSpareThreads="25" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase="/data/java/appstore-api" path="/" reloadable="false" /> </Host> </Engine> </Service> <Service name="web"> <Connector port="8088" protocol="HTTP/1.1" maxThreads="700" acceptCount="100" connectionTimeout="2000" redirectPort="8445" URIEncoding="UTF-8"/> <Engine name="web" defaultHost="localhost"> <Host name="localhost" appBase="webapp1"> <Context docBase="/data/java/appstore-web" path="" reloadable="true" /> </Host> </Engine> </Service> <Service name="web2"> <Connector port="8089" protocol="HTTP/1.1" maxThreads="700" acceptCount="100" connectionTimeout="2000" redirectPort="8445" URIEncoding="UTF-8"/> <Engine name="web2" defaultHost="localhost"> <Host name="localhost" appBase="webapp2"> <Context docBase="/data/java/appstore-web2" path="" reloadable="true" /> </Host> </Engine> </Service> </Server>
1、按照上面的配置,啟動tomcat,可以發現:
1)啟動tomcat后,在tomcat配置目錄:/usr/local/tomcat/conf下,除了默認的Catalina文件夾外,還會生成web1和web2兩個文件夾。原因是Engine組件中,指定了所用的web1和web2。當然,我們可以將不同service組件的Engine name都指定成Catalina。
2)啟動tomcat后,在tomcat目錄:/usr/local/tomcat下,除了默認的webapps文件夾外,還會生成webapp1和webapp2兩個目錄。原因是Host組件中,指定了appBase偉webapp1和webapp2.當然,我們可以將不同service組件的Host appBase指定成默認的webapps。
3)<Context docBase="/data/java/appstore-web" path="" reloadable="true" /> 這個用於配置根路徑項目,也就是/data/java/appstore-web包訪問時是通過ip:port來訪問,而不是傳統的ip:port/app
2、配置說明:
1)appBase是虛擬主機存放webapp的目錄,它可以是相對路徑,也可以是絕對路徑。如果是相對路徑,則相對於$CATALINA_HOME,嚴格並准確地說是CATALINA_BASE。
2)path是URI的匹配路徑,相當於nginx的location后的路徑。tomcat要求每個虛擬主機必須配置一個空字符串的path,該條context作為URI無法被明確匹配時的默認context,它相當於nginx中location / {}的作用。
3)docBase則是每個webapp的存放目錄,可以配置文件夾或者war包路徑
a. 如果如果配置的是文件夾,它可以是相對路徑,也可以是絕對路徑,提供相對路徑時它相對於appBase。該目錄一般在appBase的目錄下,但並不規定一定要放在appBase下,比如
<Context docBase="/data/java/appstore-web" path="" reloadable="true" />
就會將這個文件夾當成ROOT web來訪問,訪問地址是ip:port 而不是ip:port/appstore-web
(對於web服務來說,它相當於nginx的root指令,但對於webapp來說,一個context就相當於一個webapp,而docBase正是webapp的路徑。)
b. 如果配置的是war文件,比如
<Context docBase="/data/java/appstore-web.war" path="" reloadable="true" />
就會將這個jar文件解壓到webapp1的ROOT文件夾中,當成ROOT web來訪問,訪問地址是ip:port 而不是ip:port/appstore-web
另外如果app需要將自定義配置文件引入tomcat 可以在tomcat catalina.properties中增加紅色部分
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/appconfig
本文部分轉載自https://blog.csdn.net/liuxiao723846/article/details/79940428