Tomcat 配置详解/优化方案

1、Tomcat的目录层次结构

bin:   存放启动和关闭Tomcat的脚本文件

conf: 存放Tomcat服务器的各种配置文件

lib:   存放tomcat服务器支撑的jar包

logs:  存放Tomcat的日志文件

temp:  存放Tomcat运行时产生的临时文件

webapps:web应用虽在目录,即供外界访问的web资源的存放目录

work:  Tomcat的工作目录

2、JavaWeb应用的组成结构

|----html、jsp、css、js等文件,根目录下的文件外界可以直接访问

|----WEB-INF目录

|---------classes目录(java类)

|---------lib目录(java类运行所需的jar包)

|---------web.xml(web应用的配置文件)

WEB-INF 这个目录下的文件外界无法直接访问,由web服务器负责调用

3、JavaWeb应用的发布

开放式目录方式:

打包war方式:   使用   Jar -cvf *.war .

4、Tomcat的Server.xml文件

Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。每个组件都可以在Tomcat安装目录/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。

server.xml被称为Tomcat的主配置文件或全局配置文件,它完成两个任务:

(1)提供Tomcat组件的初始配置

(2)说明Tomcat的结构,含义,使Tomcat通过实例化组件完成启动及构建自身。

server.xml中描述的重要元素有 Server ,Service ,Connector ,Engine ,Host ,Context .

结构如下:

Tomcat-配置及原理

它们的用处是:

Server:

顶层元素,整个配置文件的根元素,表示整个Servlet容器或者Tomcat服务器包含多个Listener,一个GlobalNamingResources和一个Service

Service:

一组Connector和一个Engine的集合,这组Connector共用一个Engine来处理所有Connector收到的请求,负责处理所获得到的客户请求

Listener组:

监听器,用来管理Tomcat生命周期和全局资源

GlobalNamingResources:

配置系统的JNDI(Java Naming and Directory Interface)

Connector组:

连接器,代表外部客户之间的接口,将在一个指定的接口上侦听客户请求,并将获得的请求交给进行处理,然后把处理结果返回给客户

Engine:

引擎,处理中的所有客户请求,具体来说,获得一个交给的请求后,把这个请求匹配到某个上进行处理,如果没有找到合适的来进行处理,则把这个请求交给一个默认虚拟主机处理。

Host组:

虚拟主机,处理一个特定主机的请求,一般来说,每个虚拟主机都可以配置一个到多个Web应用,每个Web应用对应一个,获得的请求最终匹配到某个上,由它进行处理。

Context组:

Web应用组,每个Web应用由一个或多个Servlet组成,当获得一个请求后,将映射/conf/web.xml文件中的元素,匹配一个Servlet类进行处理并返回。当一个Web应用被初始化的时候,它将用自己的ClassLoader对象载入web.xml中定义的每个Servlet类。

我们启动Tomcat,在浏览器中输入:http://localhost:8080/ 会打开Tomcat的默认页面。实际上,这个页面是在Tomcat安装目录下的:/webapps/root/index.jsp;/webapps是Tomcat服务器用来存放Web应用的目录,每个Web应用都将在这建立各自的子目录,刚装好的Tomcat服务器虚拟主机的默认目录是/webapps/ROOT,所以默认会打开这个目录下的文件。流程如下:

在/conf目录下的web.xml配置文件中有如下配置:

index.html

index.htm

index.jsp

这里正是用来配置首页的,Tomcat将按顺序找出标签中的内容作为首页。而在我们的目录下,它只找到了index.jsp,所以会显示它;

但我们不能将所有的Web程序都放在ROOT里。所以我们需要更改Tomcat的虚拟目录;

要设置虚拟路径,需要在server.xml文件的中的Web应用添加一个子元素,实际上是配置了一个Web应用的物理存放地址到Tomcat虚拟路径的过程,使得Tomcat能够正确找到Web应用的物理存放路径;

步骤:

1)在server.xml的中加上如下代码:

2)我们把写好的Web应用中的所有文件放到下面的目录中:D:/myapp/test

3)重启Tomcat,在浏览器中输入:http://localhost:8080/test 即可测试

web.xml

Tomcat目录下/conf 可为不同的应用程序配置不同的上下文环境;用来对Servlet进行映射;

一个Web应用的根目录下的/WEB-INF目录中也有一个web.xml,当部署一个Web应用时,总是先加载/conf/web.xml,然后才加载自己Web应用的/WEB-INF/web.xml文件;但处理过程中,总是先使用自己的web.xml配置文件,如果无法处理,才把它交给Tomcat的web.xml文件。

当用户在浏览器中输入一个JSP文件地址:

http://localhost:8080/test/index.jsp

提交的请求最终由一个具体的Servlet来进行处理。我们请求传递的过程如下:

1)请求首先到达商品为8080的,然后把该请求交给引擎处理;

2)将这个请求匹配到某个去处理,因为这里默认处理的是localhost,所以请求传递到name属性是localhost的。

3)根据地址串中的子目录为"test",获知能够处理该请求的Servlet存放在虚拟目录为"test"的Web应用中,于是通过查找元素,找到path="test" 的,然后根据中的物理路径"docBase"的属性值查找Web应用的物理地址;

4)服务器根据对应的Web应用的“WEB_INF/web.xml”配置文件,查找能够处理index.jsp的servlet;

Tomcat-配置及原理

如上图所示:

connector负责接收客户请求,并向客户返回响应结果.在同一个service中,多个connector共享同一个Engine,同一个Engine可以有多个Host,一个Host可以有多个context;一个context对应一个web项目.在运行时,一个Tomcat会给每个context生成一个ServletContext类的实例.

http://localhost:8080/test/index.jsp

提交的请求最终由一个具体的Servlet来进行处理。我们请求传递的过程如下

请求首先到达商品为8080的,然后把该请求交给引擎处理;

将这个请求匹配到某个去处理,因为这里默认处理的是localhost,所以请求传递到name属性是localhost的。

根据地址串中的子目录为"test",获知能够处理该请求的Servlet存放在虚拟目录为"test"的Web应用中,于是通过查找元素,找到path="test" 的,然后根据中的物理路径"docBase"的属性值查找Web应用的物理地址;

服务器根据对应的Web应用的“WEB_INF/web.xml”配置文件,查找能够处理index.jsp的servlet;

5、Tomcat配置优化

1 ,增加JVM堆内存大小

通过修改conf 目录下的 catalina.sh文件

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8

-server -Xms1024m -Xmx1024m

-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m

-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

-Xms – 指定初始化时化的栈内存

-Xmx – 指定最大栈内存

在重启你的Tomcat服务器之后,这些配置的更改才会有效。

2,maxThreads 连接数限制

maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用   运行多个Tomcat实例的方法。

maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。

maxThreads          客户请求最大线程数

minSpareThreads        初始化时创建的 socket 线程数

maxSpareThreads       连接器的最大空闲 socket 线程数

3,压缩

压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。

compression             打开压缩功能

compressionMinSize       启用压缩的输出内容大小,这里面默认为2KB

compressableMimeType     压缩类型

4,安全配置

1,当Tomcat完成安装后你首先要做的事情如下:首次安装完成后立即删除webapps下面的所有代码

rm -rf /srv/apache-tomcat/webapps/*

注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

# cat conf/tomcat-users.xml


2, 隐藏版本信息

隐藏Tomcat版本信息

vim $CATALINA_HOME/conf/server.xml

connectionTimeout="20000"

redirectPort="8443"

maxThreads="8192"

minSpareThreads="64"

maxSpareThreads="128"

acceptCount="128"

enableLookups="false"

server="Neo App Srv 1.0"/>

运行  http://localhost:8080/

服务器信息已经被改为 Server: Neo App Srv 1.0

3, 应用程序安全

关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序

关闭 reloadable="false" 也用于防止被植入木马

6、Tomcat配置优化后实例



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"/>


一组Connector和一个Engine的集合,这组Connector共用一个Engine来处理所有Connector收到的请求,

负责处理所获得到的请求

-->

protocol="HTTP/1.1"

URIEncoding="UTF-8"

minSpareThreads="25"

maxSpareThreads="75"

enableLookups="false"

disableUploadTimeout="true"

connectionTimeout="20000"

acceptCount="300"

maxThreads="300"

maxProcessors="1000"

minProcessors="5"

useURIValidationHack="false"

redirectPort="8443"

server="Homeat App Srv 1.0"

/>

推荐阅读更多精彩内容