Tomcat 7 server.xml 配置文件详解

概览

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包部署。
然而集群配置是相当复杂的,默认的配置对于大多数人是开箱可用的。

官网原文地址:http://tomcat.apache.org/tomc…

    原文作者:我有切糕
    原文地址: https://segmentfault.com/a/1190000008873688
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞