概览
Tomcat7作为Servlet/JSP容器,它的全部行为的配置指令,包含在/conf/server.xml文件中,这个文件是一个无预定义结构的XML文件,所有的属性大小写敏感。
所有的系统属性变量都配置在catalina.properties文件中。
所有的配置元素分为以下主要几类:
Server是整个配置文件的根元素。
Service代表了一组Connectors,这些Connectors关联到同一个引擎Engine。
Connectors代表了外部客户端请求(并接收响应)到一个特定的Service的接口。
Containers代表了处理请求和并产生响应的组件。
Engine引擎为Service处理所有请求;而Host为特定的虚拟主机处理所有请求;Context为特定的web应用处理所有请求。
Nested Components,内置组件,代表可以内置到Container的元素。一些元素可以内置到任何Container中,而一些只能内置到Context中。
Server
Server代表整个Catalina servlet容器,所以在server.xml文件中,只能有一个Server元素。
属性说明
className:这个类必须是org.apache.catalina.Server的实现类,如果没有指定类名,则使用标准实现。
address:这是等待关闭命令的TCP/IP地址,如果没有指定,默认使用localhost。
port:这个端口是用于接收关闭服务的端口,可以设置为-1来禁用。
shutdown:这个命令字符串必须通过TCP/IP端口接收,才能关闭Tomcat。
内置的组件
Service – 一个或多个Service元素。
GlobalNamingResources – 配置Server的JNDI全局资源。
Service
Service元素是一个或多个Connector组件的结合体,这些Connector共享一个单独的用于处理请求的Engine组件。一个或多个Service可能内置在一个Server元素中。
属性说明
className:这个类必须是org.apache.catalina.Service的实现类。
name:Service的展示名称,如果使用标准的Catalina组件,这个名称会包含在日志信息中。同一个Server下的每个Service的名称必须唯一。
Executor 线程池
Executor代表一个可以在Tomcat各组件中共享的线程池。每个Connector可以创建一个线程池,但是可以在Connector以及其他组件之间共享,只要那些组件配置之后支持Executor。
Executor必须实现org.apache.catalina.Executor类。
Executor是Service的内置元素。为了供Connector挑选,在server.xml文件中,Executor元素需要出现在Connector前面。
属性说明
className:必须是org.apache.catalina.Executor的实现类,默认值为org.apache.catalina.core.StandardThreadExecutor。
name:名称,要求唯一。
threadPriority:Executor线程优先级,默认为常量Thread.NORM_PRIORITY(5)。
daemon:线程是否应该为守护线程,默认为true。
namePrefix:Executor创建的线程名称的前缀,每个线程名称为namePrefix+线程编号。
maxThreads:线程池最大活跃线程数量,默认200。
minSpareThreads:一直保持存活的最低线程数量,默认25。
maxIdleTime:线程超时时间,单位毫秒。线程闲置时间超过这个数值会被关闭,除非活跃线程数量低于或等于minSpareThreads。默认值为60000ms(即1分钟)。
maxQueueSize:等待执行的任务队列的最大值,默认为整型最大值Integer.MAX_VALUE。
prestartminSpareThreads:是否预启动空闲线程(minSpareThreads)。在Executor启动时,是否启动minSpareThreads。默认为false。
threadRenewalDelay:如果配置了组件ThreadLocalLeakPreventionListener(防止ThreadLocal泄露的监听器),它会通知Executor停止Context环境。如果Context停了,池里的线程会重新创建。为了避免所有的线程同时重新创建,这个选项设置了任意两个线程创建之间的延迟时间。单位毫秒ms,默认1000ms。如果为负值,线程不会被重新创建。
Connectors
Http Connector
Http Connector是支持HTTP/1.1协议的Connector组件。它使Catalina变成一个单机Web服务器,并且使他可以执行Servlet和JSP。这个组件的一个特殊实例监听着服务器的一个特定的TCP端口。
每个传入的请求都会申请一个线程。如果多个请求同时进入,并且超过了当前可用线程数量,就会创建更多的线程,直到达到配置的最大线程数量。如果还有更多的同时请求,这些请求会被堆积在Connector创建的server socket中,直到最大值(acceptCount属性)。任何更多的请求会收到”connection refused”错误,直到有可用的资源。
公共属性
allowTrace:是否允许TRACE HTTP方法,默认false。
asyncTimeout:异步请求超时时间,单位毫秒,默认10000ms(10秒)。
enableLookups:如果想使用request.getRemoteHost()方法通过DNS查找远程请求客户端的真实的主机名,则设置为true。设置为false会跳过DNS查找,直接返回IP地址。DNS查找默认禁用。
maxHeaderCount:一个请求允许最大的请求头数量。如果超出限制请求会被拒绝。如果为负值,无限制。默认值100。
maxParameterCount:GET和POST请求的参数(和值)的最大数量,超出的参数会被忽略。如果是0或者小于0,表示无限制。默认为10000。
maxPostSize:POST请求的最大字节数。如果为负,无限制。默认2097152字节(即2Mb)。
maxSavePostSize:POST请求的最大保存/缓冲字节数。-1表示无限制,0表示禁用保存/缓冲,默认为4096字节(4Kb)。
port:TCP端口,用于创建Server socket并等待进入连接。操作系统允许1个服务器监听1个IP的1个指定端口。如果值为0,Tomcat会为这个Connector选择一个随机的空闲端口。
protocol:通信协议。默认为HTTP/1.1,这个协议使用自动切换机制来选择阻塞式基于Java的Connector或者基于APR/native的Connector。如果要使用明确的协议,而不是自动切换机制选择的协议,可以选择下面的值:
org.apache.coyote.http11.Http11Protocol – 阻塞 Java connector
org.apache.coyote.http11.Http11NioProtocol – 非阻塞 Java connector
org.apache.coyote.http11.Http11AprProtocol – APR/native connector.
也支持自定义的实现。
proxyName:如果当前Connector使用代理配置,使用这个属性指定Server名称。这个Server名称,可以调用request.getServerName()方法返回。
proxyPort:指定代理的Server端口。
redirectPort:如果当前Connector不支持SSL请求,但是收到的请求匹配web.xml中配置的security-constraint选项,要求使用SSL端口,那么Catalina会自动把请求转发到这个指定端口。
scheme:给当前协议设置一个名字,这样可以通过request.getScheme()方法获得协议名词,比如给SSL协议取名HTTPS。默认值为http。
URIEncoding:字符编码。用于URI字节解码,和URL %xx部分数据的解码。默认为ISO-8859-1。useIPVHosts:将该属性设置为true会导致Tomcat使用收到请求的IP地址,来决定将请求发送到哪个主机。默认false。
标准实现属性
除了上面列出的常见的连接器属性,标准的HTTP连接器(BIO,NIO和APR/native)都支持以下属性。
acceptCount:当所有的可用线程都在使用中,传入连接请求队列的最大长度。当队列满时,任何请求都会被拒绝。默认100。
address:如果服务器有多个IP,这个属性指定使用哪个IP地址用于监听端口。默认使用与服务器关联的全部IP地址。
compressableMimeType:HTTP压缩的元数据类型,参数可以使用逗号间隔。默认为text/html,text/xml,text/plain,text/css,text/javascript,application/javascript。
compression:为了节省服务器带宽,Connector可以使用HTTP/1.1 GZIP压缩。
on:允许压缩,这回引起文本数据被压缩。
off:禁用压缩。
force:强制在所有情况下压缩。
某整数:压缩前的最小字节量,否则不压缩。
默认为false。
compressionMinSize:当compression设置为on,指定压缩前的最小数据量。默认为2048。
connectionTimeout:连接超时时间。-1表示无限制。默认值60000ms(60秒)。但server.xml默认配置为20000。
disableUploadTimeout:是否禁用上传超时时间,开启后,上传数据的连接使用单独的超时时间。
connectionUploadTimeout:上传数据时,连接超时时间。
executor:指向Executor元素的引用。如果设置了这个元属性,并且对应的Executor存在,Connector将使用这个Executor,而其他所有线程相关属性将被忽略。如果未指定此属性,Connector会使用一个私有的、内部Executor来提供线程池。
executorTerminationTimeoutMillis:在关闭Connector之前,那个私有的、内部Executor等待请求处理线程的终结的超时时间。BIO Connector默认值为0ms。NIO和APR/native Connector默认值为5000ms。
keepAliveTimeout:长连接超时时间。Connector在关闭连接之前,会等待另一个HTTP请求的时间。默认值是connectionTimeout的属性值。-1无超时时间。
maxKeepAliveRequests:HTTP请求最大长连接数量。如果值为1,禁用长连接。设为-1,无限制。默认值为100。
maxConnections:在任何给定的时间服务器接收并处理的最大连接数。当这个数字已经达到了,服务器将不会接受任何连接,直到连接的数量降到低于此值。基于acceptCount,操作系统可能仍然接收连接。
maxHttpHeaderSize:请求头和响应头的最大字节数。默认8192(8Kb)
maxThreads:最多同时处理的请求的最大线程数量,这决定了同时处理请求的最大数量。默认200。
minSpareThreads:最小空闲线程数量。默认10。
socketBuffer:Socket输出缓冲区大小。单位字节。-1表示禁用缓冲区。默认值9000字节。
SSLEnabled:是否开启SSL加密传输。需要配置secure和scheme属性。
特殊功能
代理支持:如果Tomcat运行在一个代理服务器后面时,可以使用proxyName和proxyPort属性。
SSL支持:通过设置SSLEnabled为true来开启SSL支持。同时要设置scheme为https,设置secure为true,来传递正确的信息到servlet。
Containers
Context
Context元素代表一个Web应用,此Web应用运行在一个特定的虚拟主机中。每个Web应用都基于WAR文件或者对应的解压缩文件目录。
你可以定义多个Context元素,每个Context必须在虚拟主机内有一个唯一的名称,但Context路径不需要是唯一的。一个Context名称必须用0长度的字符串,作为虚拟主机默认的Web应用,用于处理其他与Context路径不匹配的请求。
属性
cookies:是否使用cookie,可以通过cookie鉴别session。默认true。设置为false,则无法使用cookie完成session鉴证,然后必须依赖于URL重写。
docBase:应用程序文件的根目录。如果应用程序不在Host元素的appBase路径下,需要设置此属性。
path:应用程序的访问路径(context path)。
reloadable:自动重新加载class和jar文件。设置为true,Catalina会监视/WEB-INF/classes/ 和/WEB-INF/lib目录下的变动,如果检测到变动就会自动重新加载应用程序。此功能非常有用但是不建议在生产环境使用。
特殊功能
Access Log:访问日志。可以要求Catalina为Engine、Host或Context处理的请求创建访问日志,通过在这些元素中添加Valve元素,如下面这段配置:
<Context>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
...
</Context>
PS:是Valve元素,不是Value。
Engine
Engine代表处理与Service关联的整个请求处理机制。它从一个或多个Connector接收并处理全部请求,并返回完整的响应信息给Connector,最终返回到客户端。
Engine元素必须嵌入在Service元素内。
属性
defaultHost:默认的主机名,它必须指向一个Host元素的name属性。
name:Engine的逻辑名称,用于日志和错误信息。如果在一个Server中使用多个Service元素,每个Engine必须使用唯一的名称。
Host
Host代表一个虚拟主机,它关联了一个Tomcat服务器正在运行的的网络名称(如www.xxx.com)。很多情况下,系统管理员会关联多个域名到这个虚拟主机和应用上。
Host都是嵌入到Engine元素中的,可以配置多个。在Host元素中,可以为嵌入Web应用的Context信息,并关联到这个虚拟主机。
每个Engine中必须有一个Host名称来匹配Engine的defaultHost属性,即必须有一个Host作为Engine的默认主机。
属性
appBase:虚拟主机的应用程序根路径。这是个文件路径名,包含了部署到虚拟主机的应用程序。可以指定为一个绝对路径,或者关联到$CATALINA_BASE目录的相对路径。默认值为”webapps”。
name:一般是虚拟主机注册到DNS的网络名称。必须有一个Host的name作为Engine的defaultHost。
Cluster
Tomcatd的集群实现提供了session复制、Context属性复制、和集群范围的WAR包部署。
然而集群配置是相当复杂的,默认的配置对于大多数人是开箱可用的。