Tomcat7做为Servlet/JSP容器,它的所有行为的配置指令,包含在/conf/server.xml文件中,这个文件是一个无预约义结构的XML文件,全部的属性大小写敏感。javascript
全部的系统属性变量都配置在catalina.properties文件中。
全部的配置元素分为如下主要几类:css
Server是整个配置文件的根元素。html
Service表明了一组Connectors,这些Connectors关联到同一个引擎Engine。java
Connectors表明了外部客户端请求(并接收响应)到一个特定的Service的接口。web
Containers表明了处理请求和并产生响应的组件。apache
Engine引擎为Service处理全部请求;而Host为特定的虚拟主机处理全部请求;Context为特定的web应用处理全部请求。tomcat
Nested Components,内置组件,表明能够内置到Container的元素。一些元素能够内置到任何Container中,而一些只能内置到Context中。服务器
Server表明整个Catalina servlet容器,因此在server.xml文件中,只能有一个Server元素。cookie
className:这个类必须是org.apache.catalina.Server的实现类,若是没有指定类名,则使用标准实现。
address:这是等待关闭命令的TCP/IP地址,若是没有指定,默认使用localhost。
port:这个端口是用于接收关闭服务的端口,能够设置为-1来禁用。
shutdown:这个命令字符串必须经过TCP/IP端口接收,才能关闭Tomcat。网络
Service - 一个或多个Service元素。
GlobalNamingResources - 配置Server的JNDI全局资源。
Service元素是一个或多个Connector组件的结合体,这些Connector共享一个单独的用于处理请求的Engine组件。一个或多个Service可能内置在一个Server元素中。
className:这个类必须是org.apache.catalina.Service的实现类。
name:Service的展现名称,若是使用标准的Catalina组件,这个名称会包含在日志信息中。同一个Server下的每一个Service的名称必须惟一。
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。若是为负值,线程不会被从新建立。
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。
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表明处理与Service关联的整个请求处理机制。它从一个或多个Connector接收并处理所有请求,并返回完整的响应信息给Connector,最终返回到客户端。
Engine元素必须嵌入在Service元素内。
defaultHost:默认的主机名,它必须指向一个Host元素的name属性。
name:Engine的逻辑名称,用于日志和错误信息。若是在一个Server中使用多个Service元素,每一个Engine必须使用惟一的名称。
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。
Tomcatd的集群实现提供了session复制、Context属性复制、和集群范围的WAR包部署。
然而集群配置是至关复杂的,默认的配置对于大多数人是开箱可用的。