1、Tomcat 安装
- 官网:http://tomcat.apache.org/
- Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi
- 为了便于文件管理,我的习惯 在/opt目录下建立 一个install目录用于存放 软件安装包,在/usr 目录下建立local文件夹用户存放解压文件
- 下载安装包: wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz
- 解压压缩包: tar -zxvf apache-tomcat-8.0.32.tar.gz
- 移动解压文件到 mv apache-tomcat-8.0.32/ /usr/local/
- 为方便起见,可使用 mv /usr/local/apache-tomcat-8.0.32/ /usr/local/tomcat8/ 修改目录名称
设置端口防火墙:
centos7如下版本设置方法:
方法一:便于测试,能够先关闭关闭 iptables,防止端口拦截没法进行测试:service iptables stop
方法二:在iptables中添加容许规则(如下以Tomcat默认端口8080为例),操做步骤以下:
一、添加规则 sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
二、保存规则:
sudo /etc/rc.d/init.d/iptables save
三、重启iptables: sudo service iptables restart
centos7设置方法:
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
--zone #做用域
--add-port=80/tcp #添加端口,格式为:端口/通信协议
--permanent #永久生效,没有此参数重启后失效
重启防火墙
firewall-cmd --reload
Tomcat服务启动中止:
启动tomcat:sh /usr/local/tomcat8/bin/startup.sh
查看日志:tail -200f /usr/local/tomcat8/logs/catalina.out
中止tomcat: sh /usr/local/tomcat8/bin/shutdown.sh
2、Tomcat 安全配置与优化
2.1优化server.xml
2.1.1 隐藏版本信息
编辑server.xml: vi /usr/local/tomcat8/conf/server.xml javascript
为Connector 添加 server 属性
- <span style="font-family:Consolas, Liberation Mono, Menlo, Courier, monospace;"> </span><span style="font-family:Microsoft YaHei;"> <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" server="APP Srv1.0"/></span>
针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar。
咱们能够经过 jar xf 命令解压这个 jar 包会获得两个目录 META-INF 和 org ,经过修改 org/apache/catalina/util/ServerInfo.properties 文件中 的 serverinfo 字段来实现来更改咱们tomcat的版本信息。css
文件信息以下:html
[root@localhost ~]
server.info=Apache Tomcat
/8
.0.23
server.number=8.0.23.0
server.built=Mar 18 2016 20:31:49 UTC
还有另一种方法来实现隐藏或假装Tomcat的版本信息,其本质和上面同样,操做以下:
[root@localhost ~]
[root@localhost lib]
[root@localhost lib]
[root@localhost util]
server.info=nolinux
修改效果以下:前端

2.1.2禁用Tomcat管理界面
生产环境通常不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,java
把该目录下的全部文件删除便可:rm -rf /usr/local/tomcat8/webapps/*linux
另外删除相关的配置文件 host-manager.xml 和 manager.xml,在Tomcat 安装目录 conf/Catalina/localhost目录下。nginx
注释或删除tomcat_user.xml 中的全部用户权限。git
2.1.3 应用程序安全
tomcat默认 开启了对war热部署。为了防止被植入木马恶意攻击,咱们要关闭war包自动部署。github
关闭自动加载最新代码(设置reloadable)web
修改实例:
- <Host name="localhost" appBase="webapps"
- unpackWARs="false" autoDeploy="false"
- reloadable="false">
2.1.4 更改关闭Tomcat的指令
server.xml中定义了能够直接关闭 Tomcat 实例的管理端口。咱们经过 telnet 链接上该端口以后,输入 SHUTDOWN (此为默认关闭指 令)便可关闭 Tomcat 实例(注意,此时虽然实例关闭了,可是进程仍是存在的)。因为默认关闭 Tomcat 的端口和指令都很简单。默认端口为 8005,指令为SHUTDOWN 。所以咱们须要将关闭指令修改复杂一点。
固然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,所以你们也没必要担忧。除非黑客登录到tomcat本机去执行关闭操做。
修改实例:
<Server port="8005" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
或者禁用8005端口
<Server port="-1" shutdown="SHUTDOWN">
2.1.5 链接池配置
使用线程池,用较少的线程处理较多的访问,能够提升tomcat处理请求的能力。
编辑配置文件 server.xml : vi /usr/local/tomcat8/conf/server.xml
2.1.5.1 打开被注释的默认链接池配置
默认配置:
- <!--
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="4"/>
- -->
修改实例:
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="100"
- prestartminSpareThreads="true" maxQueueSize="100"/>
参数讲解:
- name: 线程名称
- namePrefix: 线程前缀
- maxThreads : 最大并发链接数,不配置时默认200,通常建议设置500~ 800 ,要根据本身的硬件设施条件和实际业务需求而定。
- minSpareThreads:Tomcat启动初始化的线程数,默认值25
- prestartminSpareThreads:在tomcat初始化的时候就初始化minSpareThreads的值, 不设置true时minSpareThreads
- maxQueueSize: 最大的等待队列数,超过则拒绝请求
2.1.5.2 修改连接配置
默认配置:
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
修改配置:
- <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
- connectionTimeout="20000"
- redirectPort="8443"
- executor="tomcatThreadPool"
- enableLookups="false"
- acceptCount="100"
- maxPostSize="10485760"
- compression="on"
- disableUploadTimeout="true"
- compressionMinSize="2048"
- noCompressionUserAgents="gozilla, traviata"
- acceptorThreadCount="2"
- compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
- URIEncoding="utf-8"/>
参数讲解:
- port:链接端口。
- protocol:链接器使用的传输方式。 Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
- protocol, Tomcat 六、7 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
注:
每一个web客户端请求对于服务器端来讲就一个单独的线程,客户端的请求数量增多将会致使线程数就上去了,CPU就忙着 跟线程切换。
而NIO则是使用单线程(单个CPU)或者只使用少许的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe 或者队 列里的请求.这样的话,只要OS能够接受TCP的链接,web服务器就能够处理该请求。大大提升了web服务器的可伸缩性。
- executor: 链接器使用的线程池名称
- enableLookups:禁用DNS 查询
- acceptCount:指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 。
- maxPostSize:限制 以FORM URL 参数方式的POST请求的内容大小,单位字节,默认是 2097152(2兆),10485760 为 10M。若是要禁用限制,则能够设置为 -1。
- acceptorThreadCount: 用于接收链接的线程的数量,默认值是1。通常这个指须要改动的时候是由于该服务器是一个多核CPU,若是是多核 CPU 通常配置为 2。
- compression:传输时是压缩。
- compressionMinSize:压缩的大小
- noCompressionUserAgents:不启用压缩的浏览器
提示:
压缩会增长Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去作。
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的 浏览过程 HTML、CSS、Javascript和Text,它能够节省40% 左右的流量。更为重要的是,它能够对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。
2.1.6 管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通讯而定制的协议,能提供较高的通讯速度和效率。若是tomcat前端放的是apache的时候,会使用到AJP这个链接 器。 默认是开启的。若是不使用apache,注释该链接器。
实例:
- <span style="font-family:Microsoft YaHei;">
2.3 应用程序部署
默认tomcat是root身份运行的,这样不安全。不要使用root用户启动tomcat。Java程序与C程序不一样。nginx,httpd 使用root用户启动守护80端口,子进程/线程会经过setuid(),setgid()两个函数切换到普通用户。即父进程全部者是root用户,子进程与多线程全部者是一个非root用户,这个用户没有shell,没法经过ssh与控制台登录系统,Java 的JVM 是与系统无关的,是创建在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该全部者的权限。为了防止 Tomcat 被植入 web shell 程序后,能够修改项目文件。所以咱们要将 Tomcat 和项目的属主作分离,这样子,即使被搞,他也没法建立和编辑项目文件。
设置普通用户,用来启动tomcat
1
2
3
4
5
6
|
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
|
参考资料:
https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md
http://nolinux.blog.51cto.com/4824967/1608940
centos7设置防火墙:http://stackoverflow.com/questions/24729024/centos-7-open-firewall-port
JVM模型:http://xmuzyq.iteye.com/blog/599750