当tomcat启动的时候它就会读取该server.xml文件,tomcat每读到一个
就会加载该标签下指定的应用,它是不知道应用是否相同的,故如果有多个
标签都是指定同一个应用,也就是说tomcat重复加载了多遍同样应用。创建多个虚拟主机,很消耗内存。
以如下为例
"localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
"/test" docBase="D:/apache-tomcat-8.5.20/webapps/test" debug="0" reloadable="false"/>
"org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
appBase
:这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用,默认为tomcat下webapps目录。例如http://localhost:8080/projectName
,projectName是webapps下每个应用名。
docBase
:指向单个应用,设置访问路径,项目的war文件存放位置,例如http://localhost:8080/test
,其中test
是path
指定的路径。
appBase与docBase没有因果和互斥
关系,随便设置。
appBase的路径是相对于tomcat目录,而docBase其父路径是appBase的路径
。
比如
<Host name="test.xyz" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="dycmms" debug="0" reloadable="false"/>
Host>
appBase路径是D:/apache-tomcat-8.5.32/webapps
appBase路径是D:/apache-tomcat-8.5.32/webapps/dycmms
Host
:指定一个域,绑定域名,它下面可以有多个Context
。
Context
:代表了运行在Host
上的单个Web
应用,一个Host
可以有多个Context
元素,每个Web
应用必须有唯一的URL路径,这个URL路径在Context中的属性path中设定。
由于tomcat是按host配置创建虚拟机的,所以有多少host创建多少个虚拟机,如果指定同一项目,那么配置多个host就划不来了。所以使用
。
例如
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Alias>www.test1.cnAlias>
<Alias>www.test2.cnAlias>
<Context path="" docBase="/root/tomcat/webapps/test" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
这里的关键在于
,将两个域名主机指向了同一个项目。
这样配置就会创建一个虚拟机,不同的域名指定同一应用。
这个只能靠创建多个Host实现了。有人说Context里path不能相同,这里
例如
<Host name="locathost" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Context path="" docBase="/root/tomcat/webapps/test" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
<Host name="www.test1.cn" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Context path="" docBase="/root/tomcat/webapps/test1" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
<Host name="www.test2.cn" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Context path="" docBase="/root/tomcat/webapps/test2" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
用多个Host创建多外域名项目。
去掉appBase里值。
有问题代码
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="D:/apache-tomcat-8.5.20/webapps/test" debug="0" reloadable="false"/>
Host>
去掉appBase里值后代码
<Host name="localhost" appBase=""
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="D:/apache-tomcat-8.5.20/webapps/test" debug="0" reloadable="false"/>
Host>
不修改appBase
,修改Context
配置,将项目war不放在默认目录webapps
下。项目所在目录不能与appBase指定路径相同。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="D:/apache-tomcat-8.5.20/newwebapps/test" debug="0" reloadable="false"/>
Host>
这里将test.war放到newwebapps
里。
申请证书
配置tomcat
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="www.hemingsheng.cn" >
<SSLHostConfig hostName="www.hemingsheng.cn">
<Certificate certificateKeystoreFile="证书路径"
certificateKeystorePassword="证书密钥" type="RSA"
/>
SSLHostConfig>
<SSLHostConfig hostName="www.tinger.wang">
<Certificate certificateKeystoreFile="证书路径"
certificateKeystorePassword="证书密钥" type="RSA" />
SSLHostConfig>
Connector>
具体参考这里Tomcat 配置Https请求