Tomcat 服务器配置
目录
Tomcat
服务器的配置主要集中于
tomcat/conf
下的
catalina.policy
、 catalina.properties、
context.xml
、
server.xml
、
tomcat-users.xml
、
web.xml
文件。
一:server.xml
server.xml
是
tomcat
服务器的核心配置文件,包含了
Tomcat
的
Servlet
容器 (Catalina
)的所有配置。由于配置的属性特别多,我们在这里主要讲解其中的一部分重要配置。
1.Server
Server
是
server.xml
的根元素,用于创建一个
Server
实例,默认使用的实现类是org.apache.catalina.core.StandardServer。
<Server port="8005" shutdown="SHUTDOWN">
...
</Server>
port : Tomcat
监听的关闭服务器的端口。
shutdown
: 关闭服务器的指令字符串。
Server
内嵌的子元素为
Listener
、
GlobalNamingResources
、
Service
。
默认配置的
5
个
Listener
的含义:
<!‐‐ 用于以日志形式输出服务器 、操作系统、JVM的版本信息 ‐‐>
<Listener className="org.apache.catalina.startup.VersionLoggerListener"
/>
<!‐‐ 用于加载(服务器启动) 和 销毁 (服务器停止) APR。 如果找不到APR库, 则会
输出日志, 并不影响Tomcat启动 ‐‐>
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on" />
<!‐‐ 用于避免JRE内存泄漏问题 ‐‐>
<Listener
className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<!‐‐ 用户加载(服务器启动) 和 销毁(服务器停止) 全局命名服务 ‐‐>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
/>
<!‐‐ 用于在Context停止时重建Executor 池中的线程, 以避免ThreadLocal 相关的内
存泄漏 ‐‐>
<Listener
className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
GlobalNamingResources
中定义了全局命名服务:
<!‐‐ Global JNDI resources
Documentation at /docs/jndi‐resources‐howto.html
‐‐>
<GlobalNamingResources>
<!‐‐ Editable user database that can also be used by
UserDatabaseRealm to authenticate users
‐‐>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat‐users.xml" />
</GlobalNamingResources>
2.Service
该元素用于创建
Service
实例,默认使用
org.apache.catalina.core.StandardService
。默认情况下,Tomcat
仅指定了
Service
的名称, 值为
"Catalina"
。
Service
可以内嵌的 元素为 :Listener
、
Executor
、
Connector
、
Engine
,其中 :
Listener
用于为
Service 添加生命周期监听器, Executor
用于配置
Service
共享线程池,
Connector
用于配置 Service 包含的链接器,
Engine
用于配置
Service
中链接器对应的
Servlet
容器引擎。
<Service name="Catalina">
...
</Service>
一个
Server
服务器,可以包含多个
Service
服务。
3 .Executo
默认情况下,
Service
并未添加共享线程池配置。 如果我们想添加一个线程池, 可以在下添加如下配置:
<Executor name="tomcatThreadPool"
namePrefix="catalina‐exec‐"
maxThreads="200"
minSpareThreads="100"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="false"
threadPriority="5"
className="org.apache.catalina.core.StandardThreadExecutor"/>
属性说明:
如果不配置共享线程池,那么Catalina 各组件在用到线程池时会独立创建。
4 .Connector
Connector
用于创建链接器实例。默认情况下,
server.xml
配置了两个链接器,一个支持HTTP
协议,一个支持
AJP
协议。因此大多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进行优化。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
属性说明:
1
)
port
: 端口号,
Connector
用于创建服务端
Socket
并进行监听, 以等待客户端请求 链接。如果该属性设置为0
,
Tomcat
将会随机选择一个可用的端口号给当前
Connector使用。
2
)
protocol
: 当前
Connector
支持的访问协议。 默认为
HTTP/1.1
, 并采用自动切换机制选择一个基于 JAVA NIO
的链接器或者基于本地
APR
的链接器(根据本地是否含有Tomcat的本地库判定)。如果不希望采用上述自动切换的机制, 而是明确指定协议, 可以使用以下值。
Http
协议:
org.apache.coyote.http11.Http11NioProtocol , 非阻塞式 Java NIO 链接器
org.apache.coyote.http11.Http11Nio2Protocol , 非阻塞式 JAVA NIO2 链接器
org.apache.coyote.http11.Http11AprProtocol , APR 链接器
AJP
协议 :
org.apache.coyote.ajp.AjpNioProtocol , 非阻塞式 Java NIO 链接器org.apache.coyote.ajp.AjpNio2Protocol ,非阻塞式 JAVA NIO2 链接器org.apache.coyote.ajp.AjpAprProtocol , APR 链接器
3
)
connectionTimeOut : Connector
接收链接后的等待超时时间, 单位为 毫秒。
-1
表示不超时。
4
)
redirectPort
:当前
Connector
不支持
SSL
请求, 接收到了一个请求, 并且也符合 security-constraint 约束, 需要
SSL
传输,
Catalina
自动将请求重定向到指定的端口。
5
)
executor
: 指定共享线程池的名称, 也可以通过
maxThreads
、
minSpareThreads等属性配置内部线程池。
6
)
URIEncoding :
用于指定编码
URI
的字符编码,
Tomcat8.x
版本默认的编码为
UTF-8 , Tomcat7.x版本默认为
ISO-8859-1
。
完整的配置如下:
<Connector port="8080"
protocol="HTTP/1.1"
executor="tomcatThreadPool"
maxThreads="1000"
minSpareThreads="100"
acceptCount="1000"
maxConnections="1000"
connectionTimeout="20000"
compression="on"
compressionMinSize="2048"
disableUploadTimeout="true"
redirectPort="8443"
URIEncoding="UTF‐8" />
5.Engine
Engine
作为
Servlet
引擎的顶级元素,内部可以嵌入:
Cluster
、
Listener
、
Realm
、 Valve和
Host
。
<Engine name="Catalina" defaultHost="localhost">
...
</Engine>
属性说明:
1
)
name
: 用于指定
Engine
的名称, 默认为
Catalina
。该名称会影响一部分
Tomcat
的
存储路径(如临时文件)。
2
)
defaultHost
: 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交
由默认的虚拟主机处理, 默认为
localhost
。
6 .Host
Host
元素用于配置一个虚拟主机, 它支持以下嵌入元素:
Alias
、
Cluster
、
Listener
、 Valve、
Realm
、
Context
。如果在
Engine
下配置
Realm
, 那么此配置将在当前
Engine
下 的所有Host
中共享。 同样,如果在
Host
中配置
Realm
, 则在当前
Host
下的所有
Context 中共享。Context
中的
Realm
优先级
> Host
的
Realm
优先级
> Engine
中的
Realm
优先级。
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true">
...
</Host>
属性说明:
1
)
name:
当前
Host
通用的网络名称, 必须与
DNS
服务器上的注册信息一致。
Engine
中
包含的
Host
必须存在一个名称与
Engine
的
defaultHost
设置一致。
2
)
appBase
: 当前
Host
的应用基础目录, 当前
Host
上部署的
Web
应用均在该目录下
(可以是绝对目录,相对路径)。默认为
webapps
。
3
)
unpackWARs
: 设置为
true
,
Host
在启动时会将
appBase
目录下
war
包解压为目
录。设置为
false
,
Host
将直接从
war
文件启动。
4
)
autoDeploy
: 控制
tomcat
是否在运行时定期检测并自动部署新增或变更的
web
应
用。
通过给
Host
添加别名,我们可以实现同一个
Host
拥有多个网络名称,配置如下:
<Host name="www.web1.com" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<Alias>www.web2.com</Alias>
</Host>
这个时候,我们就可以通过两个域名访问当前
Host
下的应用(需要确保
DNS
或
hosts
中添
加了域名的映射配置)。
7.Context
Context
用于配置一个
Web
应用,默认的配置如下:
<Context docBase="myApp" path="/myApp">
....
</Context>
属性描述:
1
)
docBase
:
Web
应用目录或者
War
包的部署路径。可以是绝对路径,也可以是相对于
Host appBase
的相对路径。
2
)
path
:
Web
应用的
Context
路径。如果我们
Host
名为
localhost
, 则该
web
应用访问
的根路径为:
http://localhost:8080/myApp
。
它支持的内嵌元素为:
CookieProcessor
,
Loader
,
Manager
,
Realm
,
Resources
,
WatchedResource
,
JarScanner
,
Valve
。
<Host name="www.tomcat.com" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<Context docBase="D:servlet_project03" path="/myApp"></Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
二:tomcat-users.xml
该配置文件中,主要配置的是
Tomcat
的用户,角色等信息,用来控制
Tomcat
中 manager,
host-manager
的访问权限。