Tomcat配置文件server.xml分析

conf/server.xml文件是Tomcat最重要的配置文件,
server.xml的每一个元素都对应于Tomcat的一个组件,
通过对server.xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。

1. server.xml文档主要结构

其整体结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--Server元素是整个配置文件的根元素,只有一个,它可以包含一个或者多个Service-->
<Server>
<!--Service由一个Engine,以及多个与Engine相连的Connector组成-->
<Service>
<!--Connector接受外部客户端发到Service的请求Request,同时返回响应Response到客户端-->
<Connector>第一个connector</Connector>
<Connector>第二个connector</Connector>

<!--Engine负责处理Connector接收进来的请求并且产生响应-->
<!--Engine可以处理Service中的所有请求-->
<Engine>
<!--Host处理发向一个特定的虚拟机的所有请求-->
<Host>
<!--Context处理一个特定的Web应用的所有请求-->
<Context></Context>
</Host>
</Engine>
</Service>
</Server>

以下根据具体配置文件实例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?xml version="1.0" encoding="UTF-8"?>

<!--shutdown属性为SHUTDOWN表示关闭Server的指令,port表示Server接收shutdown指令的端口号,用-1可以禁掉-->
<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- 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" />
<!-- 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">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>

<!--通过配置connector,可以配置协议和端口号-->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

<!-- A "Connector" using the shared thread pool-->
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" />
</SSLHostConfig>
</Connector>


<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>


<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true"
SSLEnabled="true"
storeFile="conf/localhost.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>

<!--客户端通过8009端口使用AJP协议访问Tomcat,AJP协议负责和其他的http服务器建立连接,例如集成使用apache和tomcat的时候就需要用到这个connector-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


<!--name属性用于日志和错误信息,在整个server中应该唯一,defaultHost必须与Host的name值匹配-->
<Engine name="Catalina" defaultHost="localhost">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

<Realm className="org.apache.catalina.realm.LockOutRealm"i/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Realm className="org.apache.catalina.realm.MemoryRealm"/>

<!--Host代表虚拟主机,对应于一个网络实体如www.baidu.com或者一个IP地址154.158.45.155-->
<!--name指定虚拟主机的主机名,一个Engine中有且只有一个Host的name与Engine的defaultHost属性匹配-->
<!--unpackWARS指定了是否解压.war文件-->
<!--autoDeploy和appBase与应用的自动部署有关,autoDeploy为true的时候,Tomcat会在运行期定期检查新的web应用更新-->
<!--还有xmlBase属性,可以指定应用的相关xml配置文件所在目录,默认为conf/engine_name/host_name, 本例为conf/Catalina/localhost-->
<!--Tomcat按照以下顺序扫描,1.xmlBase下面的xml配置文件,2.appBase下面的WAR文件,3.appBase下的目录-->
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">

<!--Context代表特定虚拟主机上运行的一个web应用,这个应用基于WAR文件或者其解压的目录,每个Host中可以定义任意多个Context元素-->
<!--默认的配置文件中没有Context是因为上面的Host开启了autoDeploy,没有配置静态部署-->

<!--docBase指定了该web应用的war包路径或者应用目录,在autoDeploy时,docBase不在appBase中,才需要指定;-->
<!--如果docBase就在appBase中就不需要指定,因为Tomcat会自动扫描appBase下面的WAR包和目录-->
<!--path指定了访问该web应用的上下文路径,Tomcat使用path属性与URL匹配,/app1/index.html-->
<!--在autoDeploy=true时候,不能指定path属性,path会由配置文件的文件名,war文件名自动推导出来-->
<!--reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下文件的改动-->
<!--如果为true,当改动时会触发web重新加载,适合开发调试使用-->
<!--自动部署和使用Context静态部署共存-->
<Context path="/sprint" docBase="/home/jay/tomcat/sprint.war" reloadable="true"/>



<!-- 单点登录: SingleSignOn valve, share authentication between web applications-->
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>
</Engine>
</Service>
</Server>