tomcat系列-03-server.xml

本文将介绍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的文章吧……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值