Menu

  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

Tomcat7配置指南

7
Jul
2014

Tomcat7配置指南

By Alex
/ in Java
/ tags Tomcat
0 Comments
conf/server.xml

server.xml包含了影响Tomcat7的Servlet/JSP容器行为的绝大部分配置项。可以在该配置文件中使用Ant风格的变量替换。变量可以使用系统属性,对于propname,可以使用${propname}这种形式的占位符。

server.xml的整体结构如下:

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- Server是整个配置文件的根元素 -->
<Server>
    <Listener />
    <GlobalNamingResources>
        <Resource />
    </GlobalNamingResources>
    <!-- Context处理针对某个特定Web应用程序的请求 -->
    <!-- 服务(Service)用于表示一组与一个引擎(Engine)关联的连接器(Connector) -->
    <Service>
        <!-- 连接器用于表示外部客户端与某个特定服务的接口 -->
        <Connector />
        <!-- 引擎处理针对服务的所有请求 -->
        <Engine>
            <Realm />
            <!-- 主机(Host)处理针对某个特定虚拟主机的所有请求 -->
            <Host />
        </Engine>
    </Service>
</Server>
Server元素

该元素代表整个Catalina容器,它是配置文件的根元素

属性列表
 属性名称 说明 
className 容器实现类的名称,必须实现org.apache.catalina.Server接口
address 等待关闭命令的地址,默认localhost
port 等待关闭命令的端口,设置为-1可以禁止,禁用后shutdown.bat将不能正常工作
shutdown 通过TCP连接接收的命令行字符串,用于关闭Tomcat
支持的嵌套元素
 元素名称 说明 
Service   一个或者多个service元素 
GlobalNamingResources 容器的全局JNDI资源 
Service元素

用于表示多个连接器与单个引擎的联合

属性列表
属性名称  说明 
className 服务实现类的名称,必须实现org.apache.catalina.Service接口
name 该服务的显示名,必须在Server下是唯一的 
支持的嵌套元素
元素名称  说明 
Connector 支持一个到多个
Executor 支持一个到多个
Engine 支持一个,必须放在最后面
Executor元素

表示可以被多个组件(主要是Connector)共享的线程池。Executor必须实现org.apache.catalina.Executor接口。

它必须在Connector前面定义,才可以被其引用。

属性名称 说明
className 实现类的名称,默认org.apache.catalina.core.StandardThreadExecutor
name 供其它组件引用的名称

StandardThreadExecutor提供的属性:

属性名称 说明
threadPriority 线程优先级,默认Thread.NORM_PRIORITY,即5
daemon 是否作为守护进程运行,默认true
namePrefix 线程的名字前缀
maxThreads 该池的最大线程数,默认200
minSpareThreads 最小空闲线程数,默认25
maxIdleTime 关闭空闲线程的延迟时间,默认60000ms
maxQueueSize 排队等候处理的任务最大数量
prestartminSpareThreads 是否启动时就创建minSpare数量的线程,默认false
Connector元素

用于表示一个连接器。连接器分为两种:HTTP、AJP。前者支持HTTP/1.1协议,可以让Tomcat作为独立Web服务器运行。我们这里主要讨论HTTP连接器。

Connector可以使用在其前面定义的Executor

属性列表
属性名称  说明 
allowTrace 是否支持HTTP的TRACE方法,默认false
asyncTimeout 异步请求的超时,默认10000ms
enableLookups 启用后可以通过DNS查找客户端的主机名,默认false
maxHeaderCount 请求中最多包含请求头的数量,如果超过限制,请求被拒绝,默认100
maxParameterCount GET/POST请求参数(键值对)的最大数量,超过的被忽略,默认10000
maxPostSize FORM URL参数解析能处理POST请求的最大尺寸,默认2MB
maxSavePostSize  容器在对客户端进行表单验证,或者客户端证书认证期间,最大缓存的POST请求大小,默认4KB
parseBodyMethods 

用于像处理POST那样,解析其它HTTP方法的请求体部分,默认POST,支持逗号分隔的HTTP方法名,TRACE不支持。

该配置用于支持某些RESTful风格的APP,该APP期望通过请求体传递参数

port 该连接器的监听端口
protocol

制定用于处理入站请求的协议。默认值是在基于Java的阻塞协议和APR/本地库协议之间自动选择。如果PATH(Windows)或LD_LIBRARY_PATH(Linux)环境变量包含Tomcat本地库,则自动启用APR本地库协议。可以精确设定:

org.apache.coyote.http11.Http11Protocol 阻塞的Java连接器
org.apache.coyote.http11.Http11NioProtoco 非阻塞的Java连接器
org.apache.coyote.http11.Http11AprProtocol APR/本地连接器

proxyName 如果使用了代理配置,该配置的值将作为request.getServerName()的返回值
proxyPort  如果使用了代理配置,该配置的值将作为request.getServerPort()的返回值
redirectPort 如果如果连接器支持非SSL请求,当接收到某个匹配security-constraint的请求时,将自动重定向到此端口
scheme 该属性影响request.getScheme()的返回值,默认值http,对于SSL连接器,应当设置为https
secure 该属性影响request.isSecure()的返回值,默认false,对于SSL连接器,应当设置为true
URIEncoding  URI字节被编码的方式,默认ISO-8859-1
useBodyEncodingForURI 用于指示contentType指定的编码方式是否用于URI解析,默认false
acceptCount 入站请求队列(当所有工作线程都被使用,新的请求将在此排队)的最大数量,超过此配置的连接请求被拒绝,默认100
acceptorThreadCount  用于接受连接的线程数量,在多核心的服务器上、或者具有大量keep-alive连接的场景下可以增大此值,默认为1 
acceptorThreadPriority 用于接受连接的线程的优先级,默认java.lang.Thread.NORM_PRIORITY
address 连接器在哪个IP上监听,默认0.0.0.0,即所有IP
bindOnInit 控制何时绑定Socket,如果设置为false,则连接器启动后才会绑定
compressableMimeType

逗号分隔的支持HTTP压缩的的MIME类型,默认text/html,text/xml,text/plain,text/css

compression 为节省服务器带宽,可以支持HTTP/1.1 GZIP压缩。该配置项可以配置为off/on/force,分别表示禁用、启用(压缩文本数据)、强制(压缩所有数据)
compressionMinSize 启用压缩的最小尺寸,默认2048 
connectionLinger  此连接器使用套接字被关闭时,套接字处于linger状态(等待所有数据报发出)秒数,默认-1表示禁用
connectionTimeout 在接受(accept)连接请求后,等待请求数据到达的时间,默认60000ms 
connectionUploadTimeout 文件上传最大超时时间,禁在disableUploadTimeout=false时有用 
disableUploadTimeout 如果设置为false,则可以自定义文件上传的超时 
executor 对Executor元素的name属性的引用。用于指定共享的线程池。设置该属性并且目标Executor存在,则连接器会使用目标Executor,所有线程有关的属性被忽视;否则会使用私有的Executor
executorTerminationTimeoutMillis 私有Executor在关闭连接器之前,等待请求处理线程终止的时间,默认BIO是0ms,NIO、APR是5000ms
keepAliveTimeout 在等待某个客户端下一个HTTP请求到达前,维持底层TCP连接的最大时间。默认值与connectionTimeout相同
maxConnections 同时最大处理的连接数,如果超过该数目,Tomcat会继续接受(直到超过acceptCount),但是不处理请求,这些请求会一直阻塞知道活动连接数小于maxConnections。对于BIO,默认值与maxThreads相同;对于NIO,默认值10000;对于APR,默认值8192
maxHttpHeaderSize HTTP请求/响应头的最大尺寸,默认8KB
maxKeepAliveRequests 最大keep-alive连接的数量,默认100
maxThreads 此连接器最多创建的请求处理线程的数量。默认值200
minSpareThreads 一直保持运行的线程的最小数量,默认10 
noCompressionUserAgents 不使用压缩的user-agent类型,使用正则式
processorCache 缓存处理器对象(Processor Object)有利于提高性能。使用Servlet 3.0异步处理时,设置为期望的最大同时请求数;否则设置为maxThreads大小,默认200
restrictedUserAgents 指定一个正则式,匹配的user-agent将不使用keep-alive
server 覆盖响应头server,默认Apache-Coyote/1.1
socketBuffer 套接字输出缓冲的大小,默认9000字节
SSLEnabled 设置为true,为该连接器启用SSL支持。启用后,应当设置scheme、secure
tcpNoDelay  启用服务器端套接字对象的TCP_NO_DELAY,默认true
threadPriority 处理线程的优先级,默认java.lang.Thread.NORM_PRIORITY
upgradeAsyncWriteBufferSize 对于无法在单步操作完成的异步写,分配的默认缓冲大小,无法写入的数据将放在缓冲中直到其可被写入,默认8192字节
BIO/NIO连接器支持的Java TCP套接字属性 
int socket.rxBufSize 套接字接收缓冲(SO_RCVBUF),默认使用JVM缺省值
int socket.txBufSize 套接字发送缓冲(SO_SNDBUF),默认使用JVM缺省值
bool socket.tcpNoDelay 与tcpNoDelay属性同功
bool socket.soKeepAlive 套接字保活设置(SO_KEEPALIVE),默认使用JVM缺省值
bool socket.ooBInline 套接字OOBINLINE设置,默认使用JVM缺省值
bool socket.soReuseAddress 套接字地址重用属性(SO_REUSEADDR),默认使用JVM缺省值
bool socket.soLingerOn

分别为:是否启用套接字SO_LINGER,套接字SO_LINGER的时间。与connectionLinger 同功

int socket.soLingerTime
int socket.soTimeout 与connectionTimeout同功
int socket.performanceConnectionTime 与TCP性能有关的配置项,参考Java API:Socket.setPerformancePreferences   
int socket.performanceLatency 
int socket.performanceBandwidth
int socket.unlockTimeout 连接器停止后,套接字解锁时间,默认250ms
BIO特有配置  
disableKeepAlivePercentage keep-alive最多占用的处理线程的比例,超过后将禁止使用keep-alive
NIO特有配置  
int pollerThreadCount 用于轮询事件的线程的数量。默认1。由于操作系统在accept连接时会持有全局锁,修改此配置一般不会带来性能提升
int pollerThreadPriority 轮询线程的优先级,默认java.lang.Thread.NORM_PRIORITY
int selectorTimeout 轮询线程调用select()时的超时时间,默认1000ms。由于连接清理由轮询线程执行,所有不应该设置的过大
bool useComet 是否允许 comet servlets,这是一种异步的、推送式的通信机制。默认true
bool useSendfile 是否支持sendfile特性,以提升通过网络发送文件的性能。默认true
bool socket.directBuffer 是否使用直接ByteBuffer。如果启用,应当设置-XX:MaxDirectMemorySize=xxm。默认false
int socket.appReadBufSize 每个建立的TCP连接具有一个读ByteBuffer,该属性控制此Buffer的大小。默认8192字节。对于较小的并发度,可以适当增加此值;对于极多的keep-alive连接应当减少此值或者增加堆尺寸
int socket.appWriteBufSize 每个建立的TCP连接具有一个写ByteBuffer,该属性控制此Buffer的大小。默认8192字节。此默认值偏小,除非需要处理上万的同时连接请求,应当增加此值;对于极多的keep-alive连接应当减少此值或者增加堆尺寸
int socket.bufferPool NIO连接器缓存的NioChannel对象的数量,缓存这种对象有利于减少垃圾回收。默认500
int socket.bufferPoolSize

NioChannel缓存亦可以字节而不是个数配置,规则如下:

NioChannel的BufferPoolSize = ReadBufSize + WriteBufSize

SecureNioChannel的BufferPoolSize = appReadBufSize + appWriteBufSize + networkReadBufSize + networkWriteBufSize 

默认值1000*1000*100字节(100MB)

int socket.processorCache NIO连接器缓存SocketProcessor对象的数量,缓存这种对象有利于减少垃圾回收。默认500
int socket.keyCache NIO连接器缓存KeyAttachment对象的数量,缓存这种对象有利于减少垃圾回收。默认500
int socket.eventCache NIO连接器缓存PollerEvent对象的数量,缓存这种对象有利于减少垃圾回收。默认500
int selectorPool.maxSelectors 最大的Selector对象数量,默认200。命令行参数org.apache.tomcat.util.net.NioSelectorShared=false时可以配置该参数
int selectorPool.maxSpareSelectors 池中维持的空闲Selector对象的最大数量
int oomParachute NIO连接器实现了一种OutOfMemoryError策略,它持有一块内存,当OOM发生时,这块内存立即释放,VM可以利用此空间进行清理。默认1mb
APR特有配置  
deferAccept 设置此连接器的侦听套接字的TCP_DEFER_ACCEPT标记,默认true(如果OS支持)
pollerSize 同时支持Keep-alive的连接数,默认8192
pollTime 轮询间隔,默认2000ms
sendfileSize 同时最多支持异步发送静态文件的套接字数量,默认1024
threadPriority Poller线程的优先级,默认5
useComet 是否使用comet servlets,默认true
useSendfile 是否使用sendfile特性,默认true
BIO/NIO支持的SSL相关属性  
algorithm 证书编码算法,默认是KeyManagerFactory.getDefaultAlgorithm()的返回值,SUN的JDK返回SunX509
useServerCipherSuitesOrder 设置为true,强制使用服务器的密码顺序;否则根据客户端自动选择。仅Java8+支持
ciphers 逗号分隔的、支持的密码算法,仅列出的且SSL实现支持的算法会被使用。ALL表示启用所有算法,应当仅用于测试
clientAuth  设置为true,在accept之前要求客户端提供一个有效的证书链;设置为want,要求客户端提供证书,但是没有的话也不会失败;设置为false默认不需要客户端证书 
clientCertProvider  客户端证书不是以java.security.cert.X509Certificate形式提供时,需要设置该选项
crlFile  用于验证客户端证书有效性的证书吊销列表文件
keyAlias  keystore中服务器私钥/证书的别名,如果不指定,将使用keystore中第一个读取到的key
keyPass keystore文件中服务器证书的访问密码,默认changeit
keystoreFile  keystore文件的路径,默认从用户的HOME目录中寻找*.keystore文件
keystorePass keystore文件本身的密码,默认与keyPass相同 
keystoreProvider keystore提供者的名称
keystoreType  keystore文件的类型,默认JKS
sessionCacheSize  SSL会话缓存的数量,默认0,表示无限制
sessionTimeout  SSL会话过期时间,默认86400s
sslEnabledProtocols 逗号分隔的SSL协议类型。如果不指定,使用JVM缺省值
sslImplementationName SSL实现的类名,默认org.apache.tomcat.util.net.jsse.JSSEImplementation
sslProtocol 使用的SSL协议,默认TLS
trustManagerClassName 受信任管理器类的名称,目标类必须实现javax.net.ssl.X509TrustManager且具有0参构造器。如果不指定,trust store属性被忽略
trustMaxCertLength 验证客户端证书时,最多允许的中间证书数量,默认5
truststoreAlgorithm truststore使用的算法,默认javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()
truststoreFile truststore文件的位置,默认使用系统属性javax.net.ssl.trustStore
truststorePass truststore的访问密码,默认使用系统属性javax.net.ssl.trustStorePassword
truststoreProvider truststore的提供者,默认使用系统属性javax.net.ssl.trustStoreProvider,如果没有此系统属性,则使用keystoreProvider
truststoreType truststore的keystore类型,默认使用系统属性 javax.net.ssl.trustStoreType,如果没有此系统属性,则使用keystoreType 
Engine元素

Engine用于表示整个Service的请求处理机制,它接收一个或者多个Connecter的请求,并返回处理好的响应。

Cluster、Engine、Host、Context统称为容器,他们有一些共同的属性,例如Realm。

属性列表
属性名称  说明 
backgroundProcessorDelay 该引擎及其子容器的backgroundProcess方法被调用的延迟。默认10s
className 引擎实现类的名称,必须实现org.apache.catalina.Engine接口。默认org.apache.catalina.core.StandardEngine
defaultHost 默认的host名称,必须是某个嵌套的host元素的name属性。用于识别默认处理请求的虚拟主机
jvmRoute

在负载均衡场景下,用于实现会话关联(session affinity)的标识符,此标识符在Tomcat集群内必须唯一。标识符将被附加到生成的会话标识符的尾部,以便于前端代理总是把特定会话的请求发送给特定的Tomcat实例。

亦可通过系统属性jvmRoute来设置

name 该引擎的逻辑名称,在错误信息、日志中使用,必须唯一
startStopThreads 用于并发启动host子元素的线程数量。设置为0,将使用Runtime.getRuntime().availableProcessors()
支持的嵌套元素
元素名称  说明 
Host 支持一个或者多个,每个代表单独的虚拟主机。至少具有一个host元素,且其name=engine.defaultHost
Realm 支持一个。用于指定用户、及其关联角色的数据库,此数据库在所有Host、Context中共享,除非他们单独设定
Value

可以用于定制多种特性

访问日志元素:可以作为Engine、Host、Context的子元素,记录Web服务的访问日志

XHTML
1
2
3
<Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="catalina_access_log." suffix=".log"
         pattern="common" />

请求过滤元素:可以作为Engine、Host、Context的子元素,通过IP地址、主机名来接受或者拒绝请求

XHTML
1
2
3
4
<Valve className="org.apache.catalina.valves.RemoteHostValve"
         allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         deny="192\.168\.1\.\d+"/>
Listener

引擎生命周期监听器配置。任何实现org.apache.catalina.LifecycleListener接口的类被支持

Host元素

该元素用于代表一个虚拟主机,虚拟主机通常用于和服务器的某个网络名称(域名,例如blog.gmem.cc)关联。通过虚拟主机别名,可以把多个网络名称关联到一个虚拟主机。

一个Engine内可以包含多个虚拟主机,每个虚拟主机内部可以嵌套Context。

属性列表
属性名称  说明 
appBase  该虚拟主机的应用根目录,支持绝对路径,默认webapps 
xmlBase 该虚拟主机的部署描述符文件所在目录,默认 conf/[engine_name]/[host_name] 
createDirs  是否在启动时自动创建缺少的appBase、xmlBase目录
autoDeploy  是否支持自动部署,如果设置为true,Tomcat定期检查appBase、xmlBase目录,检查是否有新的应用或者部署描述符的变化。默认true
backgroundProcessorDelay backgroundProcess延迟调用时间,默认-1,表示依赖于上层Engine的配置
className 虚拟主机实现类的名称,必须实现org.apache.catalina.Host。默认org.apache.catalina.core.StandardHost
deployIgnore  用于限制autoDeploy、deployOnStartup的路径的正则式,路径相对于appBase
deployOnStartup 是否在Tomcat启动时自动部署,默认true
failCtxIfServletStartFails 对虚拟主机下每个Context生效,是否只要有一个load-on-startup的Servlet失败,即导致Context失败。默认false 
name 通常是该虚拟主机对应的网络名称(域名)
startStopThreads  该虚拟主机用于并发启动Context的线程数,默认Runtime.getRuntime().availableProcessors() 
undeployOldVersions 是否自动移除老的、不使用的版本的应用程序
org.apache.catalina.core.StandardHost的属性
copyXML  设置为true,则自动把嵌入在应用war包的/META-INF/context.xml中的部署描述符拷贝到xmlBase,下次启动将生效。默认false。如果deployXML=false该配置无效
deployXML 设置为false,可以禁止 /META-INF/context.xml生效
unpackWARs 设置为true,war包自动解压,否则直接运行war
workDir 该虚拟主机的工作目录,默认$CATALINA_BASE/work的某个子文件夹
支持的嵌套元素
元素名称  说明 
Realm 供此主机下所有Context共享的Realm 
Value 访问日志、请求过滤器、单点登录配置
Alias 定义此虚拟主机的别名,可以关联多个解析到当前服务器的域名
Listener 生命周期监听器
单点登录支持

在很多应用场景下,一个虚拟主机下的多个Web应用需要使用单点登录特性。可以参考如下的方式启用某个虚拟主机的单点登录支持:

XHTML
1
2
3
<Host name="localhost" >
  <Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
</Host>

单点登录依据如下规则运作:

  1. 虚拟主机下所有Web应用共享同一Realm,因此Context不得自行定制Realm
  2. 用户访问非受保护资源时,不需要进行验证
  3. 用户一旦访问受保护资源时,必须使用正在访问的Web应用定义的登录方法进行验证 
  4. 一旦验证完毕,用户关联的角色将用于所有Web应用的访问控制
  5. 一旦用户从某个Web应用登出,后续对受保护资源的访问需要身份验证
  6. SSO使用HTTP Cookie来发送每个请求,Cookie中包含用户的标识符
Realm元素

Realm元素代表了一个包含用户名、密码、角色(相当于Unix的groups)信息的数据库,不同的Realm实现允许Tomcat与既有的用户身份验证与授权机制结合,实现Servlet规范规定的容器管理安全性(Container Managed Security)

属性列表
属性名称  说明 
className Realm实现类,必须实现org.apache.catalina.Realm接口,该属性必须指定

org.apache.catalina.realm.JDBCRealm  

该Realm允许Tomcat连接到关系型数据库来获取用户名、密码及其关联的角色。当验证新的登录请求时,用户密码的修改会立即被感知

allRolesMode 处理web.xml中定义的授权约束时,对特殊角色“*”的处理方式。默认值strict表示用户必须授予web.xml中定义的一个角色;authOnly表示仅仅进行身份验证,不检查其角色;strictAuthOnly与authOnly类似,但是如果角色是在web.xml中定义的,则用户必须被授予一个角色
connectionName JDBC用户名
connectionPassword  JDBC密码
connectionURL JDBC的URL
digest 用于散列数据库中的用户密码的算法,如果不指定,认为是明文密码
digestEncoding 散列算法的字符集,默认使用平台的缺省编码
driverName JDBC驱动类名
roleNameCol 定义在用户角色表中的角色列
userCredCol 定义在用户表中的密码列
userNameCol 定义在用户表、角色表中的用户名列
userRoleTable 角色表名称
userTable 用户表名称
X509UsernameRetrieverClassName  当使用客户端X509证书时,该配置指定从证书中获取用户名的类。该类必须实现org.apache.catalina.realm.X509UsernameRetriever接口。默认使用证书的SubjectDN字段作为用户名

org.apache.catalina.realm.UserDatabaseRealm  

基于一个全局的JNDI资源来实现Realm

allRolesMode (同上)
resourceName 全局的UserDatabase资源名称,Realm用来定位用户名、密码、角色 
X509UsernameRetrieverClassName (同上)

org.apache.catalina.realm.JAASRealm

通过JAAS(Java认证与授权服务)框架来验证用户身份的Realm。基于JASS的登录模块(javax.security.auth.spi.LoginModule)和安全主体(javax.security.Principal),可以开发自己的安全机制,或者与任何第三方安全机制进行集成。

allRolesMode (同上) 
appName JAAS LoginConfig中的应用程序名称
userClassNames 逗号分隔的类名,用于生成用户的安全主体对象
configFile JAAS配置文件,如果不指定,使用JVM默认的JAAS配置
roleClassNames  逗号分隔的类名,用于生成角色的安全主体对象
useContextClassLoader 使用上下文类加载器来加载用户定义的LoginModule、Principal 类
X509UsernameRetrieverClassName  (同上)

org.apache.catalina.realm.CombinedRealm

可以通过一个或者多个子Realm来进行身份验证。子Realm元素嵌套指定

org.apache.catalina.realm.LockOutRealm  

是CombinedRealm的子类型,提供锁定机制,防止用户猜测密码反复尝试

allRolesMode (同上)
cacheSize 认证失败的用户的缓存,默认1000
failureCount 锁定前允许的最大失败次数,默认5
lockOutTime 锁定时间,默认300s
支持的嵌套元素
元素名称   
Realm CombinedRealm的实现(例如LockOutRealm)支持嵌套的Realm元素
Context元素

用于表示一个运行在某个特定虚拟主机下的Web应用。每个Web应用对应于符合Servlet 2.2+规范的war包,或者war包解压的目录结构。

Tomcat通过定义的Context path来将HTTP请求与相应的Web应用关联起来。

每个Context在虚拟主机下必须具有唯一的名称,且应当有一个Context Path为0长字符串的Context作为虚拟主机的默认上下文,默认上下文处理与其它上下文不匹配的所有请求。

并行部署

Tomcat支持在同一个Context path下部署一个Web应用的多个版本,遵守如下规则:

  1. 如果请求中不包含会话信息,使用最新的应用版本
  2. 如果请求中包含会话信息,检查每个版本的会话管理器,找到匹配的应用版本并使用
  3. 在第2条中,如果找不到匹配的应用版本,则使用最新的版本

虚拟主机可以配置undeployOldVersions属性,使旧版本的Web应用在无人使用时自动移除。

context name、context path、context version、 base file name是一组相关的概念,可以参考下表的例子理解:

Context Path Context Version Context Name Base File Name 样例文件名称 (.xml, .war和目录)
/foo None /foo foo foo.xml, foo.war, foo
/foo/bar None /foo/bar foo#bar foo#bar.xml, foo#bar.war, foo#bar
Empty String None Empty String ROOT ROOT.xml, ROOT.war, ROOT
/foo 42 /foo##42 foo##42 foo##42.xml, foo##42.war, foo##42
/foo/bar 42 /foo/bar##42 foo#bar##42 foo#bar##42.xml, foo#bar##42.war, foo#bar##42
Empty String 42 ##42 ROOT##42 ROOT##42.xml, ROOT##42.war, ROOT##42

如果想使用于War包或者目录名称无关的上下文路径来部署一个Web应用,可以:

  1. 禁用autoDeploy、deployOnStartup,并且在server.xml中定义所有的上下文
  2. 或者,将目录或者War包置于虚拟主机的appBase目录之外,然后使用context.xml、docBase属性来定义Web应用
定义Context

不建议在server.xml中定义上下文,因为server.xml只能在Tomcat重启时加载。

单个上下文可以使用如下方式明确定义:

  1. 在Web应用的/META-INF/context.xml文件中定义。如果虚拟主机配置了copyXML该文件会被拷贝到$CATALINA_BASE/conf/[enginename]/[hostname]/目录下,并且重命名为Web应用的文件基名.xml
  2. 在$CATALINA_BASE/conf/[enginename]/[hostname]/ 目录下直接定义XML文件,上下文路径、版本将通过文件基名判定
  3. 在server.xml的Host元素内部定义

默认的上下文配置信息会应用到所有相关的上下文,并且被上下文的同名属性覆盖:

  1. $CATALINA_BASE/conf/context.xml:应用到所有Web应用的上下文配置
  2. $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default,应用到虚拟主机下所有Web应用的上下文配置

除了明确定义,在启用了autoDeploy、deployOnStartup的情况下,Tomcat会自动识别Web应用。

属性列表
属性名称  说明 
allowCasualMultipartParsing 默认false,设置为非false将导致Tomcat与Servlet规范不兼容。如果设置为true,调用 HttpServletRequest.getPart*或者HttpServletRequest.getParameter*时Tomcat会自动解析multipart/form-data请求体
backgroundProcessorDelay  (同Host)
className 上下文实现类的名称,必须实现org.apache.catalina.Context。默认 org.apache.catalina.core.StandardContext
cookies 默认true,设置为true将使用Cookie来存放会话标识符。设置为false将依赖于应用的会话重写来传递会话标识符
crossContext 默认false,设置为true将使当前上下文中的ServletContext.getContext()调用返回同一虚拟主机下其他请求分发器对象
docBase 应用程序目录或者War包所在位置,可以指定相对于虚拟主机appBase的路径,或者绝对路径
failCtxIfServletStartFails  (同Host)
logEffectiveWebXml 设置为true,将在INFO级别打印有效的web.xml,有效web.xml有应用程序的web.xml与Tomcat默认web.xml、以及注解等合并而成
override 设置为true,将忽略全局或者主机默认的context.xml配置
path 该Web应用的上下文路径(Context path )
reloadable  设置为true,Tomcat将监控/WEB-INF/classes/、/WEB-INF/lib中类的变化,一旦发现变化将自动重新加载Web应用。默认false
sessionCookieDomain 会话Cookie的域(Domain)设置,可以用来实现二级域名会话共享,例如可以设置为".gmem.cc"
sessionCookieName 会话Cookie名称的设置,默认JSESSIONID
sessionCookiePath

会话Cookie存放路径,如果设置为"/",那么该主机下所有其他也设置为"/"的Web应用将共享Session ID

路径用于指定Cookie关联的Web页面,如果创建一个路径/wp-admin的Cookie,那么域/wp-admin/目录下所有的地址均共享此会话

sessionCookiePathUsesTrailingSlash 某些浏览器(例如IE)会将/foo的Cookie传递给/foobar应用,设置为true可以阻止这一行为,默认true
swallowOutput 重定向stdout、stderr到Web应用的日志,默认false
useHttpOnly 设置HttpOnly标记,以防止客户端脚本访问Session ID,默认true
org.apache.catalina.core.StandardContext  
addWebinfClassesResources 除了Web应用JAR包的 META-INF/resources之外,WEB-INF/classes/META-INF/resources中的内容也作为静态资源。仅支持Servlet3.0+
aliases

该属性用于配置一些额外的位置,用于指定Web应用的资源。格式必须为:"/aliasPath1=docBase1,/aliasPath2=docBase2"

aliasPathN表示子路径,前导必须为/,不支持"/"

docBaseN表示子路径对应的War包或者目录

cacheMaxSize 静态资源缓存池最大尺寸,默认10240KB(10MB)
cacheObjectMaxSize 会被缓存的静态资源的最大尺寸,默认512KB
cacheTTL 缓存条目重验证时间,默认5000ms
cachingAllowed 是否支持静态资源缓存,默认true
copyXML 设置为true,将拷贝 /META-INF/context.xml的上下文描述符到虚拟主机的XMLBase目录下
unloadDelay 等待Servlet卸载的时间,默认2000ms
unpackWAR 覆盖Host的设置
useNaming 设置为true,Tomcat将为该应用启用一个JNDI初始上下文(InitialContext)
workDir 设置工作目录
支持的嵌套元素
元素名称  说明 
Loader 配置应用程序加载器,一般默认加载器足够使用
Manager 配置使用的会话管理器,用于创建、销毁、持久化该Web应用的HTTP会话
Realm (同Host)
Value (同Host)
Listener (同Host)
Resources 配置资源管理器,用于访问该应用关联的静态资源,默认资源管理器足够
Resource 定义JNDI资源
WatchedResource 用于监控应用状态并重启应用,其元素文本必须是一个字符串
Parameter 用于配置上下文参数
Manager元素

用于管理特定应用程序的会话。该元素可以配置在Context元素内部。

属性列表
属性名称  说明 
className 会话管理器实现类的名称,必须是org.apache.catalina.Manager接口的实现,默认org.apache.catalina.session.StandardManager
distributable 设置为true则会话管理器强制Servlet规范的要求——这意味着所有的会话属性必须是java.io.Serializable
maxActiveSessions 支持的最大会话数量
maxInactiveInterval 会话超时,默认1800s
sessionIdLength  Session ID的长度,默认16。应当通过嵌套的SessionIdGenerator元素设置
org.apache.catalina.session.StandardManager
pathname 会话持久化文件的绝对或者相对路径,应用重启后将恢复会话,默认SESSIONS.ser
processExpiresFrequency 会话过期处理的频度,默认6
secureRandomClass 继承自java.security.SecureRandom的用于生成Session ID的类。默认java.security.SecureRandom
secureRandomProvider 用于创建java.security.SecureRandom实例的类
secureRandomAlgorithm java.security.SecureRandom使用的算法

org.apache.catalina.session.PersistentManager  

必须设置系统属性:org.apache.catalina.session.StandardSession.ACTIVITY_CHECK或者org.apache.catalina.STRICT_SERVLET_COMPLIANCE以使持久化会话管理器正常工作。

PersistentManager会把不活动的会话交换到持久化存储中,在正常的重启过程中,也会保存/恢复相应的会话

maxIdleBackup 会话空闲最大时间,超过此时间则可能被持久化,默认禁用
maxIdleSwap 会话空闲最大时间,超过此时间则应该被持久化,默认禁用
saveOnRestart 当Tomcat或者应用被重启/重新载入时,是否所有的会话应该被持久化
processExpiresFrequency (同上)
secureRandomClass  (同上) 
secureRandomProvider (同上) 
secureRandomAlgorithm (同上) 
支持的嵌套元素
元素名称  说明 
SessionIdGenerator 会话ID生成器
Store 仅用于持久化的管理器实现,用于指定会话的存储
Store元素

用于表示某个持久化的会话管理器的存储方式,支持文件、数据库等方式

属性列表
属性名称  说明 
className Store实现类的名称,必须实现org.apache.catalina.Store接口
checkInterval 检查会话expired,以交换出去的间隔时间,默认60s
org.apache.catalina.session.FileStore
directory 存放每个会话文件的相对或者绝对路径
SessionIdGenerator 元素

用于为会话管理器指定Session ID的生成规则

属性列表
属性名称  说明 
className 实现类的名称,必须是org.apache.catalina.SessionIdGenerator的实现。默认org.apache.catalina.util.StandardSessionIdGenerator
jvmRoute 当前Tomcat实例的路由标记,将被附加到Session ID以实现会话关联的负载均衡
sessionIdLength Session ID的长度
配置示例代码
SSL配置
XML
1
2
3
4
5
6
7
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
         maxThreads="150" scheme="https" secure="true"    clientAuth="false"
        sslProtocol="TLS"     keystoreFile="/usr/local/ssl2/server/server.p12" keystorePass="111111"
        keystoreType="PKCS12"    truststoreFile="/usr/local/ssl2/jks/trust.keystore"
        truststorePass="123456" truststoreType="JKS"
        SSLCertificateFile="/usr/local/ssl2/server/server-cert.cer"
        SSLCertificateKeyFile="/usr/local/ssl2/server/server-key.pem" />

 

← 基于Chrome Developer Tools的JavaScript开发与调试
Ubuntu下安装GoogleDrive →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Related Posts

  • Tomcat6作为Windows服务时的JAVA_OPTS设置
  • Tomcat知识集锦
  • Ubuntu下安装Tomcat7
  • 基于JMS的ActiveMQ Java客户端示例
  • Spring与Quartz的任务调度比较

Recent Posts

  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
  • A Comprehensive Study of Kotlin for Java Developers
  • 背诵营笔记
  • 利用LangChain和语言模型交互
  • 享学营笔记
ABOUT ME

汪震 | Alex Wong

江苏淮安人,现居北京。目前供职于腾讯云,专注容器方向。

GitHub:gmemcc

Git:git.gmem.cc

Email:gmemjunk@gmem.cc@me.com

ABOUT GMEM

绿色记忆是我的个人网站,域名gmem.cc中G是Green的简写,MEM是Memory的简写,CC则是我的小天使彩彩名字的简写。

我在这里记录自己的工作与生活,同时和大家分享一些编程方面的知识。

GMEM HISTORY
v2.00:微风
v1.03:单车旅行
v1.02:夏日版
v1.01:未完成
v0.10:彩虹天堂
v0.01:阳光海岸
MIRROR INFO
Meta
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Recent Posts
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
    In this blog post, I will walk ...
  • A Comprehensive Study of Kotlin for Java Developers
    Introduction Purpose of the Study Understanding the Mo ...
  • 背诵营笔记
    Day 1 Find Your Greatness 原文 Greatness. It’s just ...
  • 利用LangChain和语言模型交互
    LangChain是什么 从名字上可以看出来,LangChain可以用来构建自然语言处理能力的链条。它是一个库 ...
  • 享学营笔记
    Unit 1 At home Lesson 1 In the ...
  • K8S集群跨云迁移
    要将K8S集群从一个云服务商迁移到另外一个,需要解决以下问题: 各种K8S资源的迁移 工作负载所挂载的数 ...
  • Terraform快速参考
    简介 Terraform用于实现基础设施即代码(infrastructure as code)—— 通过代码( ...
  • 草缸2021
    经过四个多月的努力,我的小小荷兰景到达极致了状态。

  • 编写Kubernetes风格的APIServer
    背景 前段时间接到一个需求做一个工具,工具将在K8S中运行。需求很适合用控制器模式实现,很自然的就基于kube ...
  • 记录一次KeyDB缓慢的定位过程
    环境说明 运行环境 这个问题出现在一套搭建在虚拟机上的Kubernetes 1.18集群上。集群有三个节点: ...
  • eBPF学习笔记
    简介 BPF,即Berkeley Packet Filter,是一个古老的网络封包过滤机制。它允许从用户空间注 ...
  • IPVS模式下ClusterIP泄露宿主机端口的问题
    问题 在一个启用了IPVS模式kube-proxy的K8S集群中,运行着一个Docker Registry服务 ...
  • 念爷爷
      今天是爷爷的头七,十二月七日、阴历十月廿三中午,老人家与世长辞。   九月初,回家看望刚动完手术的爸爸,发

  • 6 杨梅坑

  • liuhuashan
    深圳人才公园的网红景点 —— 流花山

  • 1 2020年10月拈花湾

  • 内核缺陷触发的NodePort服务63秒延迟问题
    现象 我们有一个新创建的TKE 1.3.0集群,使用基于Galaxy + Flannel(VXLAN模式)的容 ...
  • Galaxy学习笔记
    简介 Galaxy是TKEStack的一个网络组件,支持为TKE集群提供Overlay/Underlay容器网 ...
TOPLINKS
  • Zitahli's blue 91 people like this
  • 梦中的婚礼 64 people like this
  • 汪静好 61 people like this
  • 那年我一岁 36 people like this
  • 为了爱 28 people like this
  • 小绿彩 26 people like this
  • 彩虹姐姐的笑脸 24 people like this
  • 杨梅坑 6 people like this
  • 亚龙湾之旅 1 people like this
  • 汪昌博 people like this
  • 2013年11月香山 10 people like this
  • 2013年7月秦皇岛 6 people like this
  • 2013年6月蓟县盘山 5 people like this
  • 2013年2月梅花山 2 people like this
  • 2013年淮阴自贡迎春灯会 3 people like this
  • 2012年镇江金山游 1 people like this
  • 2012年徽杭古道 9 people like this
  • 2011年清明节后扬州行 1 people like this
  • 2008年十一云龙公园 5 people like this
  • 2008年之秋忆 7 people like this
  • 老照片 13 people like this
  • 火一样的六月 16 people like this
  • 发黄的相片 3 people like this
  • Cesium学习笔记 90 people like this
  • IntelliJ IDEA知识集锦 59 people like this
  • 基于Kurento搭建WebRTC服务器 38 people like this
  • Bazel学习笔记 37 people like this
  • PhoneGap学习笔记 32 people like this
  • NaCl学习笔记 32 people like this
  • 使用Oracle Java Mission Control监控JVM运行状态 29 people like this
  • Ceph学习笔记 27 people like this
  • 基于Calico的CNI 27 people like this
Tag Cloud
ActiveMQ AspectJ CDT Ceph Chrome CNI Command Cordova Coroutine CXF Cygwin DNS Docker eBPF Eclipse ExtJS F7 FAQ Groovy Hibernate HTTP IntelliJ IO编程 IPVS JacksonJSON JMS JSON JVM K8S kernel LB libvirt Linux知识 Linux编程 LOG Maven MinGW Mock Monitoring Multimedia MVC MySQL netfs Netty Nginx NIO Node.js NoSQL Oracle PDT PHP Redis RPC Scheduler ServiceMesh SNMP Spring SSL svn Tomcat TSDB Ubuntu WebGL WebRTC WebService WebSocket wxWidgets XDebug XML XPath XRM ZooKeeper 亚龙湾 单元测试 学习笔记 实时处理 并发编程 彩姐 性能剖析 性能调优 文本处理 新特性 架构模式 系统编程 网络编程 视频监控 设计模式 远程调试 配置文件 齐塔莉
Recent Comments
  • qg on Istio中的透明代理问题
  • heao on 基于本地gRPC的Go插件系统
  • 黄豆豆 on Ginkgo学习笔记
  • cloud on OpenStack学习笔记
  • 5dragoncon on Cilium学习笔记
  • Archeb on 重温iptables
  • C/C++编程:WebSocketpp(Linux + Clion + boostAsio) – 源码巴士 on 基于C/C++的WebSocket库
  • jerbin on eBPF学习笔记
  • point on Istio中的透明代理问题
  • G on Istio中的透明代理问题
  • 绿色记忆:Go语言单元测试和仿冒 on Ginkgo学习笔记
  • point on Istio中的透明代理问题
  • 【Maven】maven插件开发实战 – IT汇 on Maven插件开发
  • chenlx on eBPF学习笔记
  • Alex on eBPF学习笔记
  • CFC4N on eBPF学习笔记
  • 李运田 on 念爷爷
  • yongman on 记录一次KeyDB缓慢的定位过程
  • Alex on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • haolipeng on 基于本地gRPC的Go插件系统
  • 吴杰 on 基于C/C++的WebSocket库
©2005-2025 Gmem.cc | Powered by WordPress | 京ICP备18007345号-2