zoukankan      html  css  js  c++  java
  • 《Tomcat架构解析》读书笔记——tomcat优化及安全配置

    1:部署包名通过#或者##分隔,可以实现对不同webapp实现统一的请求路径
    #用于连接目录,##用于连接版本号
    例:app#a 、app#b两个war包发布,请求路径默认为:/app/a和/app/b
    app##1 app##2 :访问/app时:
    (1)request中没有session信息:使用新版本
    (2)request中包含session信息:在每个app的会话管理器中寻找。如果没找到,使用新版本

    2:filter-mapping中可以不使用url-pattern,直接用servlet-name:只针对该servlet的请求进行处理(相当于使用和该servlet相同的url-pattern)

    3:安全性:
    3.1:不使用manager时可以将名称为UserDatabase的Resource删掉
    3.2:关闭shutdown端口:设置为-1
    3.3:connector的server属性:包含在HTTP头中,默认为coyote,可以修改为其他值
    3.4:避免webapp下的所有应用自动启动:修改host的autoDeploy和deployOnStartup为false(此时只有host下配置了context的应用会部署,并且变更应用的class时需要手动重启)
    3.5:context的crossContext属性:是否可以访问其他context的资源,默认为false
    3.6:context的allowLinking属性:是否允许符号链接,默认为false。为true时可以访问Web-inf
    3.7:定制化ErrorReportValve类,修改showReport(异常栈)和showServerInfo(隐藏服务器信息)为false。错误页面推荐直接web.xml配置error-page

    4:添加https连接器及证书
    ssl证书生成:
    windows: keytool -genkey -alias td -keyalg RSA -keystore d:key.store
    linux:./keytool -genkey -alias td -keyalg RSA -keystore d:key.store
    生成后放入conf文件夹中。
    对于https的端口:必须要与http连接器的redirectPort一致
    redirectPort的作用:
    当用户用http请求某个资源,而该资源本身又被设置了必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口。


    放开server.xml中的https连接器:
    对于8.5以后:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
    <Certificate certificateKeystoreFile="conf/tdkey.keystore" certificateKeystorePassword="123456"
    type="RSA" />
    </SSLHostConfig>
    </Connector>

    对于8.5之前:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="d:key.keystore" keystorePass="123456" clientAuth="false"
    sslProtocol="TLS"
    />

    5:JVM的gc收集器:
    HotSpotJVM(sun的官方jvm)包含3种辣鸡收集器:
    吞吐量:工作时间(排除gc时间)占比
    暂停:gc导致的应用停止响应时间


    (1)串行收集器 SC:SerialCollector
    单线程操作,适用于100m以下的应用

    (2)并行收集器 PC:ParallelCollector
    又称为吞吐量收集器,并行方式回收,适用于多线程或多核的服务器
    优先考虑应用峰值性能,对于暂停时间没要求

    (3)并发收集器CC: ConcurrentCollector
    并发执行大部分gc工作,适用于中性、大型应用,响应时间优先于吞吐量。


    6:server.xml配置项优化
    (1)connector的maxConnections指定并发的最大链接数,默认为10000
    (2)connector的tcpNoDelay设置为true,开启socket的tcpNoDelay选项,从而禁用Nagle算法,默认为true无需调整。
    Nagle算法:小块数据积攒之后一起发送,降低发送包的数量,提升传输效率,但是实时性很低。
    (3)connector的maxKeepAliveRequest属性值:http请求最大长连接个数(连接被服务器关闭之前可以接受的最大请求数目),默认100.
    设置为1:禁用http1.0和http1.1的长连接
    设置为-1:不禁用
    (4)connector的socketBuffer属性,调整socket缓冲区大小有助于提升服务性能
    (5)connector的enableLooksUp设置为false,可以禁用request.getRemoteHost的DNS域名解析,减少查找时间
    (6)http协议下的connector开启静态文件压缩功能,通过compression属性设置是否开启,默认关闭(选项有 off,on,force或数字,数字代表压缩文件的阈值)。,compressionableMimeType设置需要压缩的文档类型,compressionMinSize设置开启压缩的文件阈值。
    与nginx或者ApacheHttpServer集成时可以不用考虑。
    (7)关闭自动部署,提升性能:host元素的autoDeploy属性设置为false。

    7:conf/web.xml配置jsp相关的优化
    (1)jsp的servlet配置,通过配置servlet的初始化参数完成:
    development表示是否开发模式,默认为true,可设置为false,tomcat将不再检测jsp的改动和更新。

    在开发环境下可以将development设置为true,此时的检测频率由modificationTestInterval属性决定(单位秒,默认为4)
    生产环境中development设置为false,此时通过checkInterval配置后台编译触发频率。

    trimSpace参数:
    用于移除相应中无用的空格


    (2)标签池
    org.apache.jasper.runtime.JspFactoryImpl.USE_POOL:布尔值,是否启用JSP标签body池,默认启用
    org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE:整数,JSP标签body池大小,默认8
    org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER:布尔值,输出jsp标签时会否进行字符缓冲,默认false

    使用方式:在catalina.sh或catalina.bat中启用参数:
    CATALINA_OPS = "-Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=true"
    注意:
    大多数情况下开启之后可以提升性能,但是如果jsp或者标签body很大推荐关闭该属性,否则会占用过多内存。
    如果发现内存被大量的BodyContentImpl对象占用,可以考虑关闭该属性

  • 相关阅读:
    awk语法
    Linux 统计某个字符串出现的次数
    Linux 输出文件列数,拼接文件
    Linux之date
    C变量类型和作用域
    Java垃圾回收机制
    python 字符编码问题
    Linux文件和windows文件在 换行符的区别
    不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁
    Iterator和ListIterator
  • 原文地址:https://www.cnblogs.com/ForsakenCoder/p/10507850.html
Copyright © 2011-2022 走看看