Tomcat配置与优化

Tomcat如何配置和优化,并不是每个工程师都需要掌握的内容 。但如果你想成为一个架构师,就必须要学会本文的人内容了 。在conf目录下存放着Tomcat的所有配置文件,而server.xml是其中最为重要的一个,server.xml的每个元素都对应了Tomcat中的一个组件;通过元素的配置,可以实现对Tomcat中各个组件的控制 。
1.server.xml的整体结构<Server><Service><Connector /><Connector /><Engine><Host><Context /></Host></Engine></Service></Server>该结构只是给出了Tomcat的核心组件,除了核心组件外,Tomcat还有一些其他组件 。下面我们一一学习 。
2.元素分类

(1)顶层元素:<Server></Server>
<Server>元素是整个配置文件的根元素,<Server>元素代表一个Engine元素以及一组与之相连的Connector元素 。
(2)连接器:<Connector>
<Connector>代表了外部客户端发送请求到特定Service的接口;也是外部客户端从特定Service接收响应的接口 。
(3)容器:<Engine><Host><Context>
容器的功能时处理Connector接收进来的请求,并产生相应的响应 。Engine包含Host,Host包含Context 。一个Engine组件可以处理Service中的所有请求,一个Host组件可以处理发向一个特定虚拟主机的所有请求,一个Context组件可以处理一个特定Web应用的所有请求 。
3.核心组件(1)Server
Server元素在最顶层,代表整个Tomcat容器,因此他必须是server.xml中唯一一个最外层的元素 。一个Server元素可以有一个或多个Service元素 。
<Server port="8005" shutdown="SHUTDOWN"></Server>可以看到,最外层有一个<Server>元素,shutdown属性表示关闭Server的指令;port属性表示Server接收shutdown指令的端口号,设置为-1可以禁掉该端口 。
Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的生命周期,包含如何初始化,如何结束服务,如何找到客户端要访问的Service 。
(2)Service
service的作用,是在Connector和Engine外面包一层,把它们组合在一起,对外提供服务 。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求 。
【Tomcat配置与优化】<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"></Service></Server>如上图,Server中包含一个名称为“Catalina”的Service 。实际上,Tomcat可以提供多个Service,不同的Service监听不同的端口 。
(3)Connector
Connector的主要功能,是接收连接请求,创建Request和Response对象用于和客户端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine 。
通过配置Connector,可以控制请求Service的协议及端口号 。
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /></Service></Server>通过配置第一个Connector,客户端可以通过8080端口号协议访问tomcat 。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间 。
在这个例子中,Tomcat监听Http请求,使用的是8080端口,而不是正式的80端口;实际上,在生产环境中,Tomcat也常常监听8080端口 。而不是80端口 。这是因为在生产环境中,很少讲Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如Nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因为一般仍使用8080端口 。
第二个配置Connector,客户端可以通过8009端口使用AJP协议访问Tomcat 。AJP协议负责和其他的Http服务器(如Apache)建立连接;在把Tomcat与其他服务器集成时,就需要用到这个连接器,之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源处理速度较慢,不如Apache和IIS等HTTP服务器;因此常常将Tomcat和Apache等集成,前者做Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat与Apache的连接 。Tomcat和Apache等集成的原理如下图:


推荐阅读