Linux运维昱笔记(十):Tomcat优化以及三种运行模式

Linux运维昱笔记(十):Tomcat优化以及三种运行模式

一、Tomcat优化

类别 配置内容和说明 配置 备注
1、telnet管理端口保护 1、修改默认的8005管理为不易猜测的端口(最好大于1024)
2、修改SHUTDOWN指定为其他字符串
配置项的配置只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间。
2、AJP连接端口保护 1、修改默认的AJP8009端口为不宜冲突的大于1024端口
2、通过iptables规则限制AJP端口访问的权限为线上机器
配置项的配置只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间,保护此端口的目的在于防止线下的测试流量被mod_jk转发到线上tomcat服务器
3、禁用管理端 1、删除默认的(Tomcat安装目录)/conf/tomcat-user.xml文件,重启tomcat后将会自动生成新的文件
2、删除(tomcat安装目录)/webapps下默认的所有目录和文件
3、将tomcat应用根目录配置为tomcat安装目录以外的目录
对于前段Web模块,Tomcat管理端属于Tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重
4、降权启动 1、tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限
2、如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发
代码如下 避免一旦tomcat服务被入侵,黑客直接获取该机用户权限危害整个server的安全
5、文件列表访问控制 conf/web.xml文件中default部分listings的配置必须为false
listings
false
false为不列出目录文件,true为允许列出,默认为false
6、版本信息隐藏(强制) 1、修改conf/web.xml,重定向403、40以及500等错误到指定的错误页面
2、也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向

403/fordidden.jsp


404/notfound.jsp


500/systembusy.jsp
在配置中对一些常见错误进行重定向,避免当出现错误时Tomcat默认显示的错误页面暴露服务器和版本信息,必须确保程序根目录下的错误页面已经存在
7、Server header重写 在HTTP Connector配置中加入server的配置 server=“webserver” 当tomcat HTTP端口直接提供web服务时此配置生效,加入此配置,将会替换http响应Server header部分的默认配置,默认是Apache-Coyote/1.1
8、访问限制(可选) 通过配置,限定访问的ip来源
通过配置信任ip的白名单,拒绝非白名单ip的访问,此配置主要是针对高保密级别的系统,一般产品线不需要
9、启停脚本权限回收 去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限 chmod -R 744 tomcat/bin/* 防止其他用户有启停线上Tomcat的权限
10、访问日志格式规范(推荐) 开启Tomcat默认访问日志中的Referer和User-Agent记录 开启Referer和User-Agent是为了一旦出现安全问题能够更好的根据日志进行问题排查

降权启动代码

useradd tomcat
cp -a /usr/local/tomcat /home/tomcat/
chown -R tomcat.tomcat /home/tomcat/
su -c '/home/tomcat/bin/startup.sh' tomcat
ps -ef | grep tomcat

11、禁止列出目录

vim /usr/local/tomcat/conf/web.xml
110         <init-param>
111             <param-name>listings</param-name>
112             <param-value>false</param-value>
113         </init-param>

12、页面超时

 581     <session-config>
 582         <session-timeout>30</session-timeout>
 583     </session-config>

13、默认页面

 4679     <welcome-file-list>
 4680         <welcome-file>index.html</welcome-file>
 4681         <welcome-file>index.htm</welcome-file>
 4682         <welcome-file>index.jsp</welcome-file>
 4683     </welcome-file-list>

14、配置网页传输压缩

注:如若有apache、nginx等做代理,tomcat则不必配置传输压缩

vim /usr/local/tomcat/conf/server.xml
 69     <Connector port="8080" protocol="HTTP/1.1"
 70                connectionTimeout="20000"
 71                redirectPort="8443" />
 72                compression="on"	#开启压缩
 73                compressionMinSize="50" #指定最小的压缩文件,单位是字节
 74                noCompressionUserAgents="gozilla,Traviata"	#此浏览器类型不进行压缩
 75                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />		#文件的格式
 /usr/local/tomcat/bin/shutdown.sh
 /usr/local/tomcat/bin/startup.sh

15、 Tomcat故障排查方法

查看catalina.out日志文件

二、Tomcat运行模式

1、同步概念:

  • 同步:自己亲自出马持银行卡到银行取钱(使用同步IO时,java自己处理IO读写)
  • 异步:委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API。
  • 阻塞:ATM排队取款,你只能等待(使用阻塞IO时,java调用会一直阻塞到读写完成才返回)。
  • 非阻塞:柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。

2、java对BIO、NIO、AIO的支持:

  • java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
  • Java nio:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • java AIO(NIO.2):异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

3、BIO、NIO、AIO使用场景分析

  • BIO
    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解,性能非常低下,没有经过任何优化处理和支持。

  • NIO

    NIO(new l/O是 java SE1.4及后续版本提供的一种新的I/O操作方式(即 Java.nio包及其子包)。java nio是一个基于缓冲区,并能提供非阻塞I/O操作的java API,因此nio也被看成是non-blocking l/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能,适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中。

  • APR

    安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高了性能。

未完待续…

你可能感兴趣的:(Linux)