tomcat8.0.32+jdk1.8优化
1)tomcat的安全优化:
(1)tomcat的管理端口设置:配置文件中:默认8005,需要修改,或者修改后面的字符串
<Server port="8005" shutdown="SHUTDOWN"> #管理端口,配置为默认,需要修改端口或后面字符串
否则:可以用telnet连接上后使用命令:SHUTDOWM关闭tomcat服务。注意:不能注释,注释后tomcat启不来。
[root@localhost ~]# telnet 127.0.0.1 8005
(2)ajp连接端口保护: (只用http1.1那个协议端口连接(8080那个),8009端口可注释或修改成其他端口,减少漏洞)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #ajp连接端口,配置为默认
(3)禁用管理端(3个管理界面都禁用的方法) #根据需要选择
方法1)删除默认的tomcat安装目录/conf/tomcat-users.xml文件,可禁用3个管理界面
方法2) 将tomcat应用根目录配置为tomcat安装目录以外的目录
(4)降权启动 使用普通用户tomcat管理起停
(5)文件列表访问控制(默认就是false,不用修改,不列出目录文件,若为true就是允许列出,默认不列出)
[tomcat@localhost ~]$ vim /usr/local/tomcat/conf/web.xml
<servlet>
..................
<param-value>false</param-value> #默认就是false,不用修改
</servlet>
(6)Server header重写(推荐,类比京东) 未配置时,会显示出服务器的header,容易被攻击。
配置方法:在配置文件/usr/local/tomcat/conf/server.xml中的 8080端口连接器的最后面添加:server="自定义内容"
[tomcat@localhost ~]$ vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" server="jdws" /> #引号里是自定义的,也可其他,添加该内容
[tomcat@localhost ~]$ curl --head http://localhost:8080 #不配置时:会显示出服务器的header
HTTP/1.1 200 OK
.............
Server: jdws
(7)访问限制:限制哪些IP能访问,哪些不能访问
添加位置:在server.xml配置文件中的appBase=="webapps"对应的<Host> … </Host >的标签内容的最后添加一行如下内容:(如下内容根据限制不同,选择不同,根据情况选择或修改)
#只允许192.168.231.1的IP访问tomcat:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.231.1" deny=""/>
#只允许192.168.231.1和192.168.231.2的IP访问tomcat:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.231.1, 192.168.231.2" deny=""/>
#只允许整个192.168.231.0网段的IP访问tomcat:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.231.*" deny=""/>
#只允许192.168.231.0网段的IP访问tomcat,但不允许192.168.231.1该ip访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.231.*" deny="192.168.231.1"/>
(8)建议关闭自动部署 autoDeploy="false"
修改位置:在server.xml配置文件中的appBase=="webapps"对应的<Host> … </Host >的标签内修改参数:autoDeploy="false",默认是true.
[tomcat@localhost ~]$ vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false"> #这里需要修改成false,默认是true
unpackWARs="true" #自动解压war包; autoDeploy="true" #自动部署(建议关闭,改成false)
(9)起停脚本权限回收(推荐)
chmod -R 744 /usr/local/tomcat/bin*
(root执行,除了tomcat用户,去除其他用户tomcat的bin目录脚本的可执行权限,防止其他用户有起停tomcat服务的权限)
2)tomcat的优化:(外部调优和内部调优,此处只做内部调优(也包括点jvm调优))
禁用DNS反查询(客户端连接tomcat时,tomcat会根据连接的客户端IP反向dns解析,查询客户端ip对应域名,这没必要),调整线程数,压缩
(1)tomcat的jvm参数调优:
在/usr/local/tomcat/bin/catalina.sh中添加下面内容:
JAVA_OPTS="-server -Xms4096M -Xmx4096M -XX:PermSize=256M -XX:MaxPermSize=512M -Djava.awt.headless=true "
#注释:
-server: 指定server模式启动时tomcat慢,但运行起来稳定且提高性能
-Xms4096M: 初始堆内存的大小,一般和下面的设置一样,一启动就分配这么大堆内存
-Xmx4096M: 最大堆内存的大小,一般和上面的设置一样,启动后最大也分配这么大堆内存,最大堆内存一般建议不要大于4G
-Xmn600M: 年轻代(新生代)的内存大小(即:新生代的内存大小,是堆内存里的细分出的一部分,默认值大小是整个堆内存的3/8)
-XX:PermSize=256M: 持久代的初始内存大小(可适当加大,jdk1.8及以后,自动计算,不需配置)
-XX:MaxPermSize=512M:持久代的最大内存大小(可适当加大,jdk1.8及以后,自动计算,不需配置)
-Djava.awt.headless=true: 表示无图形显示器模式,当程序里使用和绘图有关的api时,如果正确的声明了这种模式,才能正确调用api,如果不声明可能会抛出异常。一般linux系统上要加上这项.
(2)tomcat内部调优:
1)关闭DNS反查询 2)调整线程数 3)设置压缩 4)设置为nio模式,运行效率高,默认是:protocol="HTTP/1.1"
在/usr/local/tomcat/conf/server.xml配置文件中配置:统一进行上面的设置,如下:
[tomcat@localhost ~]$ vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
maxThreads="300" acceptCount="300"
enableLookups="false" disableUploadTimeout="true"
connectionTimeout="20000"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443" server="GDWS" />
注释:此处参数是两种生产环境的参数,根据需要参考选择
minSpareThreads="25" maxSpareThreads="75" #最小最大空闲线程数设置,也可是100和200,
enableLookups="false" #关闭DNS反查询
disableUploadTimeout="true" #打开一个下载超时
connectionTimeout="20000" #连接的超时时间,毫秒
acceptCount="300" #等待工作的线程数量,也可200,当所有的线程都启用以后,还允许一些用户连接进来,这个就是等待工作的线程数(不算正在工作的线程数)
maxThreads="300" #最大线程数,只当前tomcat可以同时工作的最大线程数量,也可认为是:当前同时处理的用户请求数量, 也可500,根据需要此处参数是两种生产环境的参数,根据需要参考选择
compression="on" #开启压缩
compressionMinSize="2048" #压缩的最小大小,文件超过这么大时才压缩
compressableMimeType #压缩的文件类型,需要压缩的什么文件类型
protocol="org.apache.coyote.http11.Http11NioProtocol" #设置为nio模式,运行效率高,默认是:protocol="HTTP/1.1"