1、Tomcat简介
2、Tomcat安全设置
3、Tomcat优化
4、参考文章html

1、Tomcat简介
Tomcat 是 Apache软件基金会下的一个免费、开源的WEB应用服务器,它能够运行在 Linux 和 Windows 等多个平台上,因为其性能稳定、扩展性好、免费等特色深受广大用户喜好。目前,不少互联网应用和企业应用都部署在 Tomcat 服务器上, 以前咱们 tomcat 都采用的是默认的配置,所以在安全方面仍是有所隐患的。tomcat默认参数是为开发环境制定,而非适合生产环境,尤为是内存和线程的配置,默认都很低,容易成为性能瓶颈。java
Tomcat基础操做包括如下内容linux
2、Tomcat安全设置
1. 版本安全
升级当前的tomcat版本为最新稳定版本。故名思议,最新稳定版本就要兼顾最新和稳定这两个概念。一个稳定的版本,是须要时间沉淀的,而最新又是相对于稳定版而言的最新。所以咱们通常会选择当前大版本中,最新版本往前推几个版本或者往前推几个月出的版本。
目前,企业经常使用的tomcat大版本为6.0和7.0版本,8.0版本虽然已经出了好久了,可是仍然不建议使用。
在升级版本中,须要注意的事情有两点:
(1)尽可能避免跨大版本的升级
(2)将当前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件进行备份,而后部署完新版本的 tomcat 以后,将这些配置文件覆盖过去便可,而后停掉旧版本,启动新版本便可完成升级操做。nginx
2. 隐藏版本信息
为了不黑客针对某些版本进行攻击,所以咱们须要隐藏或者假装 Tomcat 的版本信息。默认 Tomcat 的版本信息以下:web

针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar。咱们能够经过 jar xf 命令解压这个 jar 包会获得两个目录 META-INF 和 org ,经过修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改咱们tomcat的版本信息。文件信息以下:shell
[root@localhost ~]# cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#' server.info=Apache Tomcat/7.0.53 server.number=7.0.53.0 server.built=Mar 25 2014 06:20:16 固然,还有另一种方法来实现隐藏或假装Tomcat的版本信息,不过本质和上面同样,操做以下: [root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib [root@localhost lib]# mkdir -p org/apache/catalina/util [root@localhost lib]# cd org/apache/catalina/util [root@localhost util]# vim ServerInfo.properties server.info=nolinux # 若是想修改为其它版本号,把这个地方的值改为其它值就好了
修改完毕以后,重启 Tomcat便可看到效果!效果以下:数据库

3. 帐户安全管理
优化配置以前,咱们须要配置一个tomcat管理员帐户,来登陆查看Tomcat控制台提升的各类参数。
在conf/ tomcat-users.xml下添加用户:apache
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
启动tomcat,登陆查看信息:http://127.0.0.1:8080/vim

3、Tomcat优化
1. 简介
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,因此说服务器性能牛B,Tomcat也不会太差。固然提升服务器的硬件配置,是须要大量RMB的支持的。因此不到万不得已不会采用这种方式,通常公司会采起下面这种经过优化配置,来提高Tomcat性能的方式。浏览器
2. tomcat的3种运行模式
2.1 bio
默认的模式,性能很是低下,没有通过任何优化处理和支持.
2.2 nio
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操做方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操做的Java API,所以nio也被当作是non-blocking I/O的缩写。它拥有比传统I/O操做(bio)更好的并发运行性能。
2.3 apr
安装起来最困难,可是从操做系统级别来解决异步的IO问题,大幅度的提升性能
Tomcat apr模式也是Tomcat在高并发下的首选运行模式。
3. 并发优化(线程池)
在tomcat中每个用户请求都是一个线程,因此可使用线程池提升性能。开启而且使用配置:

在Connector中指定使用共享线程池

查看Tomcat控制台

Executor重要参数说明
(1)name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须惟一。默认值:None;
(2)namePrefix:在JVM上,每一个运行线程均可以有一个name 字符串。这一属性为线程池中每一个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
(3)maxThreads:该线程池能够容纳的最大线程数。默认值:200;
(4)maxIdleTime:在Tomcat关闭一个空闲线程以前,容许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。
(5)minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。
(6)threadPriority:线程的等级。默认是Thread.NORM_PRIORITY
(7)executor:表示使用该参数值对应的线程池;
(8)minProcessors:服务器启动时建立的处理请求的线程数;
(9)maxProcessors:最大能够建立的处理请求的线程数;
(10)acceptCount:指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理
参数最佳实践一


注意:线程池指定Web请求负载的数量,所以,为得到更好的性能这部分应当心处理。能够经过调整链接器属性“maxThreads”完成设置。maxThreads的值应该根据流量的大小,若是值太低,将有没有足够的线程来处理全部的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;若是设置的太大,Tomcat的启动将花费更多时间。所以它取决于咱们给maxThreads设置一个正确的值下载地址。
在上述配置中,maxThreads值设定为“250”,这指定能够由服务器处理的并发请求的最大数量。若是没有指定,这个属性的默认值为“200”。任何多出的并发请求将收到“拒绝链接”的错误提示,直到另外一个处理请求进程被释放。错误看起来以下,
若是应用提示上述错误,务必检查上述错误是不是因为单个请求花费太长时间形成的,这个问题的缘由是这样的,有时候若是数据库链接不释放的话,进程将不会处理其它请求。
注意: 若是请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,它意外着最好使用“Tomcat集群”的多个实例。也就是说,若是有“1000”请求,两个Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的状况下设置maxThreads=1000。
参数最佳实践二
<Connector port="8080" protocol="HTTP/1.1" maxThreads="1000" minProcessors="100" maxProcessors="1000" minSpareThreads="100" maxSpareThreads="1000" enableLookups="false" URIEncoding="utf-8" acceptCount="1000" connectionTimeout="20000" disableUploadTimeout="ture" redirectPort="8443" />
4. 禁用AJP链接器
AJP(Apache JServer Protocol)AJPv13协议是面向包的。WEB服务器和Servlet容器经过TCP链接来交互;为了节省SOCKET建立的昂贵代价,WEB服务器会尝试维护一个永久TCP链接到servlet容器,而且在多个请求和响应周期过程会重用链接。

咱们通常是使用Nginx+tomcat的架构,因此用不着AJP协议,因此把AJP链接器禁用。

在管理界面中看不到ajp了:

当用nginx和tomcat作企业级集群的时候,须要禁用掉AJP协议,不是时候,最好不要关闭,由于当tomcat与其余服务器集成时候,须要用到AJP。
5. 提升JVM栈内存
你使用过tomcat的话,简单的说就是“内存溢出”. 一般状况下,这种问题出如今实际的生产环境中.产生这种问题的缘由是tomcat使用较少的内存给进程,经过配置TOmcat的配置文件(Windows 下的catalina.bat或Linux下的catalina.sh)能够解决这种问题.这种解决方法是经过增长JVM的栈内存实现的.也就是说,JVM一般不去调用垃圾回收器,因此服务器能够更多关注处理web下载地址请求,并要求尽快完成。要更改文件(catalina.sh) 位于"\tomcat server folder\bin\catalina.sh",下面,给出这个文件的配置信息。
-Xms – 指定初始化时化的栈内存 -Xmx – 指定最大栈内存
在重启你的Tomcat服务器以后,这些配置的更改才会有效。
6. 压缩文件
(1)Tomcat有一个经过在server.xml配置文件中设置压缩的选项。压缩能够在connector像以下设置中完成下载地址
(2)在前面的配置中,当文件的大小大于等于500bytes时才会压缩。若是当文件达到了大小可是却没有被压缩,那么设置属性compression="on"。不然Tomcat默认设置是“off”。
7. 分离 Tomcat 和项目的用户
为了防止 Tomcat 被植入 web shell 程序后,能够修改项目文件。所以咱们要将 Tomcat 和项目的属主作分离,这样子,即使被搞,他也没法建立和编辑项目文件。
8. 禁用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者经过域名服务器查找机器名 转换为IP地址。
DNS查询须要占用网络,而且包括可能从不少很远的服务器或者不起做用的服务器上去获取对应的IP的过程,这样会消耗必定的时间。
修改server.xml文件中的Connector元素,修改属性enableLookups参数值: enableLookups="false"
若是为true,则能够经过调用request.getRemoteHost()进行DNS查询来获得远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
9. 其余选项
(1)开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推进总体性能。
(2)每当开机时,Tomcat服务器应当自动地重启。
(3)通常状况下HTTPS请求会比HTTP请求慢。若是你想要更好的安全性,即便慢一点咱们仍是要选择HTTPS。