tomcat 配置项描述(1)

配置综述

对tomcat服务器的配置,主要是指tomcat主目录下面conf文件夹下对各个配置文件的配置,包括用户权限访问控制,安全配置,集群配置,与HTTP服务器进行集成(Apache服务器,Nginx服务器等),JNDI资源的设置与访问等。以下是我个人学习tomcat.apache.org官网的一些笔记,或者是翻译。
配置文件可以描述为以下几种主要的目录:
1. Server:顶层元素由一组Connector和一个Engine组成
2. Connectors:外部客户端发送请求到特定Service的中间接口
3. Containers:处理接受的请求并产生对应通信请求的部件,EngineService处理所有请求,Host处理请求到特定虚拟Host的请求,Context处理特定的webApplication工程。
4. Nested Component:可以内嵌到Container容器中的元素,有些元素可以内嵌到所有的Container容易,有些只能内嵌到Context中

Server

Serverserver.xml的顶层元素,由xml文件定义可以知道,server元素有且必须为一个,他的属性如下所示
1. className:须实现org.apache.catalina.Server接口,不写为默认
2. address:tomcat使用的ip地址,默认为localhost
3. port:设置为-1表示不允许使用bin目录下的关闭脚本,不推荐配置-1
4. shutdown:通过tcp/ip发送关闭的命令

Service

< Service >元素代表了一到多个Connectors共享一个Engine处理接受到的请求,Service必须内嵌到Server中,可以有多个
1. className:必须实现org.apache.catalina.Service接口,可默认不写
2. name:Service的名字,如果我们使用标准的Service会在log目录看到日志,且Service的名字必须是唯一的

Executor

Executor:代表的是可以在部件中共享使用的线程池,必须实现org.apache.catalina.Executor接口,所有的Executor都支持一下两种属性
1. className:需实现特定接口,如果实现了LifeCycle接口,可以被容器开启和关闭,默认的实现为org.apache.catalina.core.StandardThreadExecutor
2. name:代表该线程池的名字,其他部件可以通过name引用该线程池
org.apache.catalina.core.StandardThreadExecutor默认实现的属性如下所示:
1. threadPriority:优先级,默认为5,等价于Thread.NORM_PRIORITY常量
2. daemon:守护线程
3. namePrefix:线程前缀名
4. maxThreads:最大活跃线程数,默认为200
5. minSpareThreads:最小活跃线程数,默认为25
6. maxIdleTime:空闲线程经过maxIdleTime毫秒后销毁,默认为60000毫秒(1分钟)
7. maxQueueSize:等待被执行的最大任务数量,默认为Integer.MAX_VALUE
8. prestartminSpareThreads:是否立即生成minSpareThreads线程数,默认为false
9. threadRenewalDelay

HTTP Connectors

HTTPConectors支持HTTP协议,一个HTTPConector在指定的tcp端口上监听请求,与之关联的Engine的负责请求的处理并产生相应的响应,一个Service可以支持多种Conector。

所有标准的Connector支持如下的属性:

  1. allowTrace:是否可以追踪HTTP请求,默认为false
  2. asyncTimeout: 异步请求超时时间设置,默认为10000毫秒
  3. enableLookups:调用request.getRemoteHost()进行域名转换需设置为true,默认为false,直接返回ip
  4. maxHeaderCount:最大header数量,小于0为没有限制,默认为10
  5. maxParameterCount:get和post请求最多参数数量,默认为10000,小于0没有限制
  6. maxPostSize:小于0没有限制,默认为2Mb
  7. maxSavePostSize:表单验证或者证书验证时缓存的post数据最大值,-1位不限制大小,0在证书验证中不保存数据,默认为4096Kb
  8. parseBodyMethods:默认为post
  9. port: connector监听接受请求的端口号,0位随机选择
  10. protocol:通信协议,默认为HTTP/1.1,自动选择BIO或者是APR/native方式,如果OS的path上存在APR的library,首先使用apr,不同通信方式为
    BIO:org.apache.coyote.http11.Http11Protocol
    NIO:org.apache.coyote.http11.Http11NioProtocol
    APR:org.apache.coyote.http11.Http11AprProtocol
    1. proxyName:代理服务器名字
    2. proxyPort:代理拂服务器端口
    3. redirectPort:如果本Connector不支持ssl请求,如果某个request符合< security-constraint >走https通道,Catalina将该请求重定向到redirectPort端口
    4. scheme:默认为http,ssl为https
    5. secure:默认为false,request.isSecure()返回值
    6. URIEncoding:默认为ISO-8859-1
    7. useBodyEncodingForURI:默认为false
    8. useIPVHosts:默认为false
    9. xpoweredBy:默认为false

BIO,NIO以及APR都支持的属性

  1. acceptCount:最大接受request数,默认为100,超过此数目后新连接将被拒接
  2. acceptorThreadCount:接受连接的线程数量,默认为1,对于非持久链接,可以增大
  3. acceptorThreadPriority:acceptor线程的优先级,默认为5等价于Thread.NORM_PRIORITY
  4. address:默认将会使用该server的所有服务器
  5. allowedTrailerHeaders:
  6. bindOnInit:默认为true
  7. compressableMimeType:默认为text/html,text/xml,text/plain,text/css
  8. compression:Connector可以使用HTTP/1.1GZIP压缩技术去节省服务器的流量,这个的可能取值是on允许压缩文本数据,off不允许压缩,force压缩所有情景,或者取值一个整数作为是否压缩的阈值,默认为off
  9. compressionMinSize:压缩阈值,默认为2048
  10. connectionLinger:被Connector使用的socket在关闭后将会停留多少秒,默认为-1,表示不允许socket逗留
  11. connectionTimeout: Connector在建立连接后等待请求到达的超时阈值,-1表示不存在超时连接,默认为60000毫秒,需注意,在标准的server.xml中的设置为20000毫秒;除非disableuploadtimeout设置为false,这个时间也将被用于读取请求报文时
  12. connectionUploadTimeout:仅当disableuploadtimeout设置为false才生效,单位为毫秒
  13. disableUploadTimeout:默认为false,表示不允许更长的超时
  14. executor:引用Executor元素的名字,如果该executor存在,配置的线程相关属性将无效,如果不存在,使用一个内部线程池
  15. executorTerminationTimeoutMillis:内部线程池在Connector处理请求钱等待时间,默认BIO为0,NIO和APR为5000毫秒
  16. keepAliveTimeout:默认使用connectionTimeOut属性,表示connector在处理完一个http请求了等待多少毫秒就会关闭连接
  17. maxConnections:服务器在任何时刻可以接收并处理的连接数,连接数达到时,服务器可以继续建立连接,但是并不处理。需注意,一旦达到maxConnections数量,服务器依旧可以接收连接达到acceptCount,maxConnection根据Connector的不同而不同,BIO连接数为maxThread线程数,NIO为1000,APR/native为8192。如果值为-1,表示不计算不启用连接数限制
  18. maxExtensionSize:限制httpRequest的报文长度,默认为8192,值为-1表示没有限制
  19. maxHttpHeaderSize:报文头长度,默认为8192kb
  20. maxKeepAliveRequests:保持长连接的http请求,设置为1表示不启用长连接,-1表示为无限制,默认为100
  21. maxSwallowSize:最大可上传的报文数大小,默认为2097152 kb,负数表示不限制
  22. maxThreads:该Connector的线程数量,默认为200
  23. maxTrailerSize:-1为不限制,默认为8291kb
  24. minSpareThreads:默认为10,最小在运行线程
  25. noCompressionUserAgents:符合该正则表达式的连接将不使用压缩
  26. processorCache:可以被缓存的对象的数量,-1表示不限制,默认为200,低于Servlet3.0版本,使其等于maxThreads的属性,如果为Servlet3.0或更高,可以大于maxThread
  27. restrictedUserAgents:符合该正则表达式的将不能使用keepalive保持长连接
  28. server:响应报文头的server属性,默认为Apache-Coyote/1.1
  29. socketBuffer:socket输出缓冲区,-1不启用缓冲区,默认为9000byte
  30. SSLEnabled:默认为false,启用ssl协议
  31. tcpNoDelay:默认为true
  32. threadPriority:默认为java.lang.Thread.NORM_PRIORITY,对应jdk中线程的优先级
  33. upgradeAsyncWriteBufferSize:异步写缓冲区大小,单位为byte,默认为8192

Java Tcp Socket属性

以下属性BIO跟NIO都有的Socket属性(默认为jdk原始值)
1. socket.rxBufSize:接受缓冲区大小(int)
2. socket.txBufSize:发送缓冲区大小(int)
3. socket.tcpNoDelay:等价于tcpNoDelay(boolean)
4. socket.soKeepAlive:持久连接(boolean)
5. socket.ooBInline:紧急发送(boolean)
6. socket.soReuseAddress:重用地址(boolean)
7. socket.soLingerOn:(boolean)
8. socket.soTimeout:等价于connectionTime
9. socket.performanceConnectionTime:(int)
10. socket.performanceLatency:
11. socket.performanceBandwidth:
12. socket.unlockTimeout:处理完完成后释放连接间隔,单位毫秒,默认为250

BIO特有属性

  1. disableKeepAlivePercentage:不允许保持持久连接的百分比,默认为75,取值为0~100

NIO特有属性

  • pollerThreadCount:pool事件的处理线程数量,默认为1
  • pollerThreadPriority:默认为5,对应于java.lang.Thread.NORM_PRIORITY
  • selectorTimeout:默认为1000毫秒,不要设置过大
  • useComet:默认为true
  • useSendfile:默认为true
  • socket.directBuffer:默认为false,是否使用java的ByteBuffers,在Sun’sJDK中需要在tomcat启动脚本中加入-XX:MaxDirectMemorySize=256m.
  • socket.appWriteBufSize:tomcat中关联writeByteBuffer,默认为8192,并发连接数如果不高,可以适当提高该属性值
  • socket.bufferPool:NIO使用NioChannel 类缓存socket,默认为500,-1表示没有限制,0表示不缓存任何socket
  • socket.processorCache:默认为500,-1表示无限制,0不缓存
  • socket.keyCache:默认为500,-1表示无限制,0不缓存
  • socket.eventCache:默认为500,-1表示无限制,0不缓存
  • selectorPool.maxSelectors:减少对selector的争夺,默认为200,org.apache.tomcat.util.net.NioSelectorShared属性设置为false时将会启用该属性
  • selectorPool.maxSpareSelectors:减少selector争夺,默认为-1表示没有上限,当org.apache.tomcat.util.net.NioSelectorShared设置为false时启用该属性
  • command-line-options:该-Dorg.apache.tomcat.util.net.NioSelectorShared=true|false对于NIO connector是有效的,默认为true,设置为false表示为每个线程拥有一个selector
  • oomParachute:(int)默认为1mb

APR/native配置

  • deferAccept:如果操作系统支持TCP_DEFER_ACCEPT 的话默认为true,否则为false
  • pollerSize:同时支持并发连接数,默认为8192,该属性是maxConnection的同义词
  • pollTime:poll调用的间隔,单位毫秒,越低的值会减少连接带来的延时,但是会消耗更多的cpu,默认为2000
  • sendfileSize:发送文件的最大大小,默认为1024byte
  • useComet:默认为true
  • threadPriority:默认为5,对应java.lang.Thread.NORMAL_PRIORITY
  • useSendfile:默认为true

Context

Context代表了运行在某个VirtualHost上的一个WebApplication,在某个VirtualHost上面Context当且仅有一个独一无二的name,context的路径可以重复,另外,一个Context的路径必须等于一个零长度的string,这个Context成为当前virtualHost上默认的webapplication,这个将会处理所有不匹配所有context上下文的连接。
tomcat官方不推荐直接在conf/server.xml上面修改配置,如果这么做,conf/server.xml除了重启tomcat之外是无法重启的。
个人的context可以这么定义:
- 在application的里面,定义/META-INF/context.xml文件,该文件会被复制到$CATALINA_BASE/conf/[enginename]/[hostname]/目录下面,并以webApplication的文件名字加上xml的后缀名
- 在conf/server.xml文件中的Host元素中配置

默认为的Context元素配置可以再多个webapplication中共享使用,但是在context中内置的就只能是自身配置使用,在$CATALINA_BASE/conf/context.xml和$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default将会在多web应用中生效

实现Context接口具有的属性

  1. allowCasualMultipartParsing:默认为false,在调用HttpServletRequest.getPart* or HttpServletRequest.getParameter*方法时候是否自动转换multipart/form-data,需要servlet3.0的支持
  2. backgroundProcessorDelay:默认为-1,单位毫秒,代表将会依赖于Context父parent的后台处理线程,当为非负时候,将依赖于自己的子容器
  3. className:需实现org.apache.catalina.Context接口,默认为为standard实现
  4. containerSciFilter:容器过滤
  5. cookies:设置为true使用cookies来确认session,false,表示不使用cookie,session的跟踪将依赖于url的重写
  6. crossContext:设置为false时,ServletContext.getContext() 返回值将为null,true返回请求的上下文
  7. docBase:指向war文件或者一个文件夹地址,直接路劲或者是相对于 appBase的一个路径
  8. failCtxIfServletStartFails:默认为false
  9. fireRequestListenersOnForwards:默认为false
  10. logEffectiveWebXml:默认为false
  11. override:设置为true表示忽略global跟host的默认context,
  12. path:该web应用的上下文路径
  13. preemptiveAuthentication:
  14. privileged:
  15. reloadable:设置为true,可以监听/WEB-INF/classes和/WEB-INF/lib下的变化动态加载类,但是会消耗大量的资源
  16. resourceOnlyServlets:
  17. sessionCookieDomain:可以使用本context的域名,用于多域名中共享session
  18. sessionCookieName:默认为JSESSIONID
  19. sessionCookiePath:当设置为sessionCookiePath=”/”,同一个host下面的所有context都可以或得到该context的session
  20. sessionCookiePathUsesTrailingSlash:默认为true
  21. swallowAbortedUploads:设置为true,超过长度的部分将会被堵
  22. swallowOutput:设置为true,当调用System.out.或者System.err时候将会被重定向到log上
  23. tldValidation:默认为false
  24. useHttpOnly:默认为true,表示不允许客户端脚本传递session
  25. wrapperClass:

标准tomcat实现支持的属性

  1. addWebinfClassesResources:
  2. aliases:提供了一系列可供本context使用的外部资源的地址,该值的形式应该为”/aliasPath1=docBase1,/aliasPath2=docBase2”,alias必须以/开头,docBaseN必须是一个绝对地址指向war文件或者是目录
  3. cacheMaxSize:静态资源cache,默认为10240mb
  4. cacheObjectMaxSize:默认为512bytes
  5. cacheTTL:默认为5000(毫秒)
  6. cachingAllowed:默认为true
  7. unloadDelay:默认为2000(毫秒)
  8. unpackWAR:默认为true
  9. useNaming:默认为true,表示启用jndi
  10. workDir:默认为/CATALINA_BASE/work,我们可以通过访问ServletContext的getArrtubite(javax.servlet.context.tempdir)方法获得java.io.File类型的对象

    Context元素支持的内嵌类型
    Loader,Manager,Realm,Resources,WatchedResources
    可以在Context中定义参数


  ...
  "companyName" value="My Company, Incorporated"
         override="false"/>
  ...

等价于

param>
  <param-name>companyNameparam-name>
  <param-value>My Company, Incorporatedparam-value>
param>

实现org.apache.catalina.LifecycleListener接口,并在Context配置监听context的状态


  ...
  "com.mycompany.mypackage.MyListener" ... >
  ...

请求过滤,对处理请求ip进行控制,以正则表达式的形式


  ...
  "org.apache.catalina.valves.RemoteHostValve"
         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
  "org.apache.catalina.valves.RemoteAddrValve"
         deny="192\.168\.1\.\d+"/>
  ...

对资源的访问的配置


  ...
  "jdbc/EmployeeDB" auth="Container"
            type="javax.sql.DataSource"
     description="Employees Database for HR Applications"/>
  ...

等价于

<resource-ref>
  <description>Employees Database for HR Applications</description>
  <res-ref-name>jdbc/EmployeeDB</res-ref-name>
  <res-ref-type>javax.sql.DataSource</res-ref-type>
  <res-auth>Container</res-auth>
</resource-ref>

你可能感兴趣的:(tomcat)