tomcat系列-03-server.xml

[TOC]

本文将介绍tomcat配置文件server.xml中常用的节点配置。

1 整体结构

server.xml文件的整体结构其实和上一篇文章中我们所说的tomcat-体系结构图是对应的:

tomcat-体系结构图

以下是一个包括常见元素的基础的server.xml配置:

<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    <Listener SSLEngine="on"
        className="org.apache.catalina.core.AprLifecycleListener" />
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <GlobalNamingResources>
        <Resource auth="Container" description="User database that can be updated and saved"
            factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase"
            pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
    </GlobalNamingResources>

    <Service name="Catalina">

        <Connector URIEncoding="UTF-8" connectionTimeout="20000"
            port="80" protocol="HTTP/1.1" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

        <Engine defaultHost="localhost" name="Catalina">

            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                    resourceName="UserDatabase" />
            </Realm>

            <Host appBase="webapps" autoDeploy="true" name="localhost"
                unpackWARs="true">

                <Valve className="org.apache.catalina.valves.AccessLogValve"
                    directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log."
                    suffix=".txt" />

            </Host>
        </Engine>
    </Service>
</Server>

2 Server节点

<Server port="8005" shutdown="SHUTDOWN">
<!-- .......  -->
</Server>

这会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。
各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行.
其实server节点就是代表tomcat自己了。

Server的相关属性

  • className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer;
  • port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
  • shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
  • server.xml文件中只能有一个Server节点

3 Listener

** 注意:此处的server.xml中的Listener和部署描述符web.xml文件中的Listener并不是一回事。**

4 Service节点

  • 关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。
  • Service应该包含一个引擎(Engine)、一个或多个连接器(Connector)。
  • 在一定意义上,可以将Service理解为Engine和Connector的粘合剂、关联器、或者说是盛放他们的"容器"。
  • 一般很少有需要去直接更改Service节点属性

4.1 Connector

4.1.1 Connector类型

  • HTTP连接器
  • SSL连接器
  • AJP 1.3连接器
  • proxy连接器

4.1.2 Connector常见属性

  • address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;
  • maxThreads:支持的最大并发连接数,默认为200;
  • port:监听的端口,默认为0;
  • protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
  • redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
  • connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
  • connectionUploadTimeout:……………………
  • keepAliveTimeout:…………………………
  • enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;
  • acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
  • excutor:Excutor的唯一的名称,详见下文的Excutor
  • maxHttpHeaderSize:允许的最大请求头大小(8192 bytes---8kB)
  • maxKeepAliveRequests:每个Keep-Alive的HTTP连接允许完成的最大请求数
  • scheme:是request.getScheme()的返回值
    • HTTP-Connector应该设置为http
    • SSL-Connector应该设置为https
  • secure:是request.isSecure()的返回值
    • HTTP-Connector应该设置为false
    • SSL-Connector应该设置为true
  • SSLEnabled:是否在Connector上启用SSL,默认false
  • SSLProtocol:使用的SSL/TLS版本
  • URIEncoding:URL字符集,比如UTF-8
  • useBodyEncodingForURI:……
  • useIPVHosts:Connector是否基于IP的虚拟主机

4.1.3 几种Connector示例

HTTP connector 示例

<Connector port="8080" protocol="HTTP/1.1"
      maxThreads="150" connectionTimeout="20000"
      redirectPort="8443" URIEncoding="UTF-8"/>

SSL connector 示例

<Connector port="8443"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" />

AJP connector 示例

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

4.2 Executor

可以通过Excutor为同一个Service的所有Connector配置一个共享线程池。
在多个Connector的状况下,这样处理非常有用,多个Connector共享一个线程池。

<Service name="Catalina">

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

    <Connector executor="tomcatThreadPool" URIEncoding="UTF-8" 
                 connectionTimeout="20000" port="80" protocol="HTTP/1.1" 
                 redirectPort="8443"/>
</Service>

Excutor的详细参数配置请点击这里看官网文档

4.3 Engine节点

<Engine name="Catalina" defaultHost="localhost">

Engine是Servlet处理器的一个实例,即servlet引擎。
Engine容器中可以包含Realm、Host、Listener和Valve子容器。

4.3.1 Engine常见属性

  • baseDir:基目录
  • defaultHost
    • 表示当连接器收到一个发往非明确定义虚拟主机的请求时,将请求发往哪个默认的虚拟主机。
    • 在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名。
  • name
    • Engine组件的名称,用于日志和错误信息记录时区别不同的引擎
    • 该属性还决定了 ${CATALINA_BASE}/conf/XXX的目录名,比如/soft/tomcat-7.0.72-80/conf/Catalina
  • jvmRoute:可以理解为在负载均衡中tomcat实例的唯一标记属性
<Engine defaultHost="localhost" name="Catalina">
    <!--此处应该至少有一个名为localhost的Host节点-->
</Engine>

4.3.2 Host节点

Host节点代表一个虚拟主机,类似于Nginx中的server指令。

<Host name="localhost" appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
    <!-- host...  -->
</Host>
  • name:虚拟主机的名称,必须唯一
  • appBase:比如webapps目录,即存放web应用程序的目录.可以使用基于$CATALINA_HOME的相对路径
  • autoDeploy:自动热部署
  • deployOnStartup:在tomcat启动时是否自动解压war包,默认为true
  • unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开
  • errorReportValveClass:对于错误页的处理类,默认为:org.apache.catalina.valves.ErrorReportValve
  • xmlValidation:xml校验
  • xmlNamespaceAware:xml校验

4.3.3 Context节点

一个Context定义用于标识tomcat实例中的一个Web应用程序

<Host appBase="webapps" autoDeploy="true" name="localhost"
    unpackWARs="true">
    
    <Valve className="org.apache.catalina.valves.AccessLogValve"
        directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" 
        prefix="localhost_access_log."
        suffix=".txt" />

    <Context docBase="web-1" path="/web-1" reloadable="true"
        source="org.eclipse.jst.jee.server:web-1" />
    <Context docBase="ROOT" path=""></Context>
</Host>
  • docBase
    • 相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
    • docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,而docBase绝不能为deploy-bbs类的名字
  • path : 相对于Web服务器根路径而言的URI,如果为空"",则表示为webapp的根路径
  • reloadable : 是否允许重新加载此context相关的Web应用程序的类
  • antiJARLocking:避免在windows上锁定JAR,默认false
  • antiResourceLocking:避免在windows上锁定资源,默认false
  • cachingAllowd:是否允许静态资源缓存,默认为true
  • cacheMaxSize:该Context的最大静态资源缓存值(KB)
  • cacheTTL:Time To Live(second)
  • caseSensitive:是否区分URL大小写,默认为true
  • cookies:是否启用和该应用对应的会话的cookie支持,默认为true
  • unloadDelay:在unload时的延迟时间
  • unpackWAR:是否自动解压war包,默认为true

4.3.4 WatchedResource

定义被监控的程序清单。
比如web.xml被修改时应用会自动重新加载,就是因为web.xml文件在${CATALINA_HOME}/conf/context.xml文件中被标记为一个WatchedResource。

<Context docBase="web-1" path="/web-1" reloadable="true"
    source="org.eclipse.jst.jee.server:web-1">
    <WatchedResource>WEB-INF/log4j.xml</WatchedResource>
</Context>

4.3.5 Realm

Realm和认证授权相关。

<Engine defaultHost="localhost" name="Catalina">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
            resourceName="UserDatabase" />
    </Realm>
</Engine>

5 GlobalNamingResources节点

应用于整个服务器的JNDI映射,此可以避免每个Web应用程序都需要在各自的web.xml创建,这在web应用程序以WAR的形式存在时尤为有用。它通常可以包含三个子元素:

  • Environment: 取代web.xml中的env-entry
  • Resource:取代web.xml中的resource-ref
  • ResourceEnvRef:取代web.xml中的resource-env-ref

6 Manager

Manger对象用于实现HTTP会话管理的功能

  • StandardManager
    • Tomcat6的默认会话管理器,用于非集群环境中对单个处于运行状态的Tomcat实例会话进行管理。
    • 当Tomcat关闭时,这些会话相关的数据会被写入磁盘上的一个名叫SESSION.ser的文件,并在Tomcat下次启动时读取此文件。
  • PersistentManager
    • 当一个会话长时间处于空闲状态时会被写入到swap会话对象,这对于内存资源比较吃紧的应用环境来说比较有用。
  • DeltaManager
    • 于Tomcat集群的会话管理器,它通过将改变了会话数据同步给集群中的其它节点实现会话复制。
    • 这种实现会将所有会话的改变同步给集群中的每一个节点,也是在集群环境中用得最多的一种实现方式。
  • BackupManager
    • 用于Tomcat集群的会话管理器,与DeltaManager不同的是,某节点会话的改变只会同步给集群中的另一个而非所有节点。

7 Valve

  • Valve用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。
  • Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。
  • 请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。

有关Value的详细配置请看官方文档

不知不觉就码了这么多字符…………以后有时间再写有关Valve的文章吧……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容