最近公司又在搞安全监控,针对tomcat关于AJP端口存在的漏洞要求升级指定版本或关闭该端口重启服务,小编所在的部门关于tomcat外置服务器AJP端口早已关闭,得益于前技术总监的优化建议。

以下是关于前技术总监关于tomcat优化的建议,拿小本本记下的内容:

1.关闭AJP端口8009

在tomcat前再使用web服务器时,即便tomcat提供的都是静态资源文件,情况都要比直接使用http连接差的多,如果确实有需要集成前置服务器,走AJP协议要比http协议性能更好。通常前置服务器有nginx做静态伺服器和反向代理足矣,无需使用AJP,不用的资源直接关掉即可。

2.关闭access_log

外置tomcat服务器server.xml中会输出access_log日志,基本没有什么价值,可以关闭了。springboot中内置的tomcat默认就是关闭access_log的。

<Valve className="org.apache.catalina.valves.AccessLogValve" 
directory="logs"  prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

3.关闭无用的servlet

有些无用的servlet配置也可以去掉,例如未使用jsp可以关掉相关的配置。

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  <init-param>
    <param-name>fork</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>false</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>

4.war包与tomcat分离开

不要直接把war包上传到webapps下发布,应该将war包放到指定的目录,并在conf/Catalina/localhost目录下添加相应的配置文件,内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\demo.war" />

5.生产环境禁止启用<Context>属性的reloadable=true

reloadable是需要线程监听程序文件修改的,然后重新加载web应用,默认值是false(不同版本可能有差异),开发测试可以启用。

6.连接器connector使用线程池

server.xml文件中有注释掉的相关配置,合理设置线程池最大值,最小值,最大连接数,超时时间等,可通过jemeter进行压力测试,没有放之四海皆准的配置。namePrefix可以自定义方便标识。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-star-"
 maxThreads="200" 
connectionTimeout="20000" minSpareThreads="10"/>

7.jsp预编译

我们知道jsp是通过servlet写出的,所以访问jsp页面会进行编译操作,jsp->java->class,提前把jsp编译成class可以减少运行时编译,当然这需要因地制宜。

8.连接器配置protocal

设置协议处理传入的流量,默认值是HTTP/1.1,tomcat会自动选择apr(如果存在相关本地库)或java nio,也可指定协议。

org.apache.coyote.http11.Http11NioProtocol -non blocking Java NIO connector
org.apache.coyote.http11.Http11Nio2Protocol -non blocking Java NIO2 connector
org.apache.coyote.http11.Http11AprProtocol -the APR/native connector.
9.合理设置JAVA_OPTS

相关设置需要结合服务器信息(内存,处理器等),可以打开gc日志,使用jemeter压测进行相应调整,适当调整各代大小减少gc。

set "JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Xss512k -Xloggc:/star_gc.log -XX:+PrintGCDetails -XX:+UseG1GC"

10.有关session管理

如果有会话管理,可以直接使用tomcat生成的sessionId策略,无需自己再生成一套sessionId,或者实现SessionIdGenerator 定义自己的session管理,尽量减少重复性工作。


©著作权归作者所有:来自51CTO博客作者mb5fdb0a4002420的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 社区leaf学习笔记|02. leaf服务器文件配置IP及端口
  2. 社区leaf学习笔记|01. leaf开源游戏服务器搭建
  3. 社区leaf学习笔记|06. 游戏玩家注册、登陆(中)
  4. 轻度Linux服务器维护人员常用的Shell脚本命令
  5. 【Nest教程】Nest项目部署在ubuntu服务器
  6. 【Nest教程】Nest项目配置邮件服务器,实现发送邮件
  7. Tornado的特点是什么?性能怎么样?
  8. Tornado的特点是什么?性能怎么样?
  9. Heartbleed漏洞的原理与防治

随机推荐

  1. php连接服务器进行服务器命令操作
  2. 关于PHP中依赖注入的详细介绍
  3. php中 continue break exit return 的区
  4. PHP 核心特性之命名空间
  5. php 安装zip模块
  6. PHP中Redis扩展无法加载问题
  7. php实现汉字转拼音
  8. PHP提高SESSION响应速度的方法有哪些
  9. opcode 操作数 5 种不同的类型
  10. 不要在循环体中使用 array_push ()