tomcat server.xml 配置文件详解

配置文件路径/opt/tomcat/conf/server.xml
 

###########################

Apache 跟tomcat相关的配置(供参考)

ProxyPass /admin balancer://admincluster/admin lbmethod=byrequests

ProxyPass /dmap balancer://admincluster/dmap lbmethod=byrequests

ProxyPassReverse /admin balancer://admincluster/admin

ProxyPassReverse /dmap balancer://admincluster/dmap


<Proxy balancer://admincluster>

BalancerMember ajp://172.21.3.21:8009 route=tomcat1 loadfactor=1 retry=10 timeout=180

BalancerMember ajp://172.21.4.21:8009 route=tomcat2 loadfactor=1 retry=10 timeout=180

ProxySet stickysession=JSESSIONID
</Proxy>

#########################################

 

 

Tomcat Configure

 

<?xml version='1.0' encoding='utf-8'?>

 

<Server port="8006" shutdown="SHUTDOWN">

监听器

  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>

 

•VersionLoggerListener:当Tomcat启动时,该监听器记录Tomcat、Java和操作系统的信息。该监听器必须是配置的第一个监听器。

•AprLifecycleListener:Tomcat启动时,检查APR库,如果存在则加载。APR,即Apache Portable Runtime,是Apache可移植运行库,可以实现高可扩展性、高性能,以及与本地服务器技术更好的集成。

•JasperListener:在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,然后编译成class文件供JVM使用。

•JreMemoryLeakPreventionListener:与类加载器导致的内存泄露有关。

•GlobalResourcesLifecycleListener:通过该监听器,初始化< GlobalNamingResources>标签中定义的全局JNDI资源;如果没有该监听器,任何全局资源都不能使用。< GlobalNamingResources>

•ThreadLocalLeakPreventionListener:当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。当线程执行完任务被收回线程池时,活跃线程会一个一个的更新。只有当Web应用(即Context元素)的renewThreadsWhenStoppingContext属性设置为true时,该监听器才有效。

 

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>

 

GlobalNamingResources元素定义了全局资源,,该配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的。

 

  <Service name="china-admin">

配置http连接器

    <Connector port="8180" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"   #强制重定向端口到8443

               server="Null"/>

配置AJP连接器

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

 

        <Engine name="Catalina" defaultHost="china-admin" jvmRoute="tomcat1">

                 #defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配

 

 

TOMCAT集群配置

 

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="6" channelStartOptions="3">

定义集群节点,以及节点间的同步方式

className-指定Cluster使用的类

channelSendOptions-Cluster发送消息的方式

channelSendOptions可以设置为2、4、8、10,每个数字代表一种方式

2 = Channel.SEND_OPTIONS_USE_ACK(确认发送)

4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送)

8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)

 

 

            <Manager className="org.apache.catalina.ha.session.BackupManager"

                expireSessionsOnShutdown="false"

                notifyListenersOnReplication="true"

                mapSendOptions="6"/>

Manager决定如何管理集群的Session信息。Tomcat提供了两种Manager:BackupManager和DeltaManager

        BackupManager-集群下的所有Session,将放到一个备份节点。集群下的所有节点都可以访问此备份节点

        DeltaManager-集群下某一节点生成、改动的Session,将复制到其他节点。

        DeltaManager是Tomcat默认的集群Manager,能满足一般的开发需求

        使用DeltaManager,每个节点部署的应用要一样;使用BackupManager,每个节点部署的应用可以不一样.

 

        className-指定实现org.apache.catalina.ha.ClusterManager接口的类,信息之间的管理.

        expireSessionsOnShutdown-设置为true时,一个节点关闭,将导致集群下的所有Session失效

        notifyListenersOnReplication-集群下节点间的Session复制、删除操作,是否通知session listeners

        maxInactiveInterval-集群下Session的有效时间(单位:s)。

        maxInactiveInterval内未活动的Session,将被Tomcat回收。默认值为1800(30min)

             mapSendOptions  备份管理器使用复制的映射,此映射正在发送和接收消息。您可以设置此映射如何发送消息的标志,默认值为6(同步)。

注意,如果使用异步消息传递,则接收节点可以按照与发送会话的顺序不同的顺序处理会话的更新消息

 

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

Channel是Tomcat节点之间进行通讯的工具。Channel包括下述的5个组件:Membership、Sender、Transport、Receiver、Interceptor

 

 

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                    address="auto"

                    port="4000"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>

 

Receiver

接收器,负责接收消息

接收器分为两种:BioReceiver(阻塞式)、NioReceiver(非阻塞式)

常用属性:

className-指定Receiver使用的类

address-接收消息的地址

port-接收消息的端口

autoBind-端口的变化区间

如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听

selectorTimeout-NioReceiver内轮询的超时时间

maxThreads-线程池的最大线程数

 

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

 

Sender内嵌了Transport组件,Transport真正负责发送消息

Transport分为两种:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式)

阻塞式:可以将一次将多个信息并发发送至其它节点,但一次只能传送给一个节点

非阻塞式:可以一次发送多个信息至一个或多个节点

 

    

 

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">

            Interceptor : Cluster的拦截器

            TcpFailureDetector-网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表,

            此时TcpFailureDetector可以拦截到某个节点关闭的信息,

            并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列

TcpPingInterceptor:ping拦截

StaticMembershipInterceptor 静态成员拦截,可定义StaticMembership,对该成员拦截

 

 

                <Member className="org.apache.catalina.tribes.membership.StaticMember"

                    host="172.21.3.21"

                    port="4000"

                    securePort="-1"

                    uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}"/>

                <Member className="org.apache.catalina.tribes.membership.StaticMember"

                    host="172.21.4.21"

                    port="4000"

                    securePort="-1"

                    uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}"/>

 

Membership维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点

            className-指定Membership使用的类

            address-组播地址

            port-组播端口

            frequency-发送心跳(向组播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500

            dropTime-Membership在dropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000

 

            注: 组播(Multicast):一个发送者和多个接收者之间实现一对多的网络连接。

                一个发送者同时给多个接收者传输相同的数据,只需复制一份相同的数据包。

                它提高了数据传送效率,减少了骨干网络出现拥塞的可能性

                相同组播地址、端口的Tomcat节点,可以组成集群下的子集群

 

 

            </Interceptor>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>

 

 

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

在节点失效后,使用mod_jk模块来处理 tomcatjvmroute接管。 节点崩溃后,随后的请求将转到其他集群节点。 这会导致性能下降。 当在备份节点上启用此阀门并看到一个请求时,它将重写cookiejsesinid信息,以使用这个响应请求的备份群集节点的路由。 响应传递到客户端后,所有后续的客户端请求将直接发送到备份节点。 会话ID的更改也发送到所有其他群集节点。 之后,会话粘固性将直接工作到备份节点,在重新启动后,流量不会返回到失败的节点!

 

 

 

            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                filter=""/>

该阀门记录指定请求(处理前)和相应响应(处理后)的内容。 它在调试与headers和Cookie相关的问题时尤其有用。

根据希望执行的日志的粒度,此阀门可以连接到任何容器。

         </Cluster>

 

 

 

 

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase" digest="sha-256"/>

      </Realm>

 

Realm,可以把它理解成“域”;Realm提供了一种用户密码与web应用的映射关系,从而达到角色安全管理的作用。在本例中,Realm的配置使用name为UserDatabase的资源实现

 

    

          <Host name="china-admin"  appBase="china-admin/target/"

            unpackWARs="true" autoDeploy="true">

name属性指定虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配;一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要,原因在前面已经说明。

unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。

Host的autoDeploy和appBase属性,与Host内Web应用的自动部署有关;没有出现的xmlBase和deployOnStartup属性,也与Web应用的自动部署有关

autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新

 

          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="china-admin_access_log" suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

 

AccessLogValve的作用是通过日志记录其所在的容器中处理的所有请求,在本例中,Valve放在Host下,便可以记录该Host处理的所有请求。AccessLogValve记录的日志就是访问日志,每天的请求会写到一个日志文件里。AccessLogValve可以与Engine、Host或Context关联;在本例中,只有一个Engine,Engine下只有一个Host,Host下只有一个Context,因此AccessLogValve放在三个容器下的作用其实是类似的。

本例的AccessLogValve属性的配置,使用的是默认的配置;下面介绍AccessLogValve中各个属性的作用:

(1)className:规定了Valve的类型,是最重要的属性;本例中,通过该属性规定了这是一个AccessLogValve。

(2)directory:指定日志存储的位置,本例中,日志存储在$TOMCAT_HOME/logs目录下。

(3)prefix:指定了日志文件的前缀。

(4)suffix:指定了日志文件的后缀。通过directory、prefix和suffix的配置,在$TOMCAT_HOME/logs目录下,可以看到如下所示的日志文件。

(5)pattern:指定记录日志的格式,本例中各项的含义如下:

%h:远程主机名或IP地址;如果有nginx等反向代理服务器进行请求分发,该主机名/IP地址代表的是nginx,否则代表的是客户端。后面远程的含义与之类似,不再解释。

%l:远程逻辑用户名,一律是”-”,可以忽略。

%u:授权的远程用户名,如果没有,则是”-”。

%t:访问的时间。

%r:请求的第一行,即请求方法(get/post等)、uri、及协议。

%s:响应状态,200,404等等。

%b:响应的数据量,不包括请求头,如果为0,则是””-。

 

pattern的配置中,除了上述各项,还有一个非常常用的选项是%D,含义是请求处理的时间(单位是毫秒),对于统计分析请求的处理速度帮助很大。

 

<Context path="/admin" docBase="admin"  reloadbale="true" > 

1、path:即要建立的虚拟目录,,注意是/admin,它指定访问Web应用的 上下文根,如http://localhost:8080/admin/****

2、docBase:为应用程序的路径或WAR文件存放的路径 ,可以是绝对路径 ,也可是相对路径,相对路径是相对于<Host >

3、reloadable:如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改变,如果监视到有class文件被更新,服务器自动重新加载Web应用,这样我们可以在不重起tomcat的情况下改变应用程序

一个Host元素中嵌套任意多的Context元素。每个Context的路径必须是惟一的,由path属性定义。另外,你必须定义一个path=“”的context,这个Context称为该虚拟主机的缺省web应用,用来处理那些不能匹配任何Context的Context路径的请求。

 

在/conf/context.xml中进行独立的配置。因为 server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而 context.xml 文件则不然, tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器

 

      </Host>

    </Engine>

  </Service>

</Server>

 

 

 

 

参考:

tomcat server.xml 配置文件详解

 

 

Tomcat的配置

tomcat server.xml 配置文件详解

  • Server 元素表示整个 Catalina servlet 容器。
  • Service元素表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。Server 中可以有多个 Service。
  • Executor表示可以在Tomcat中的组件之间共享的线程池。
  • Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
  • Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范述。
  • Engine元素表示与特定的Catalina服务相关联的整个请求处理机器。它接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回给连接器,以便最终传输回客户端。
  • Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。