• Tomcat调优(不定期更新)


    本文只记录工作中遇到的Tomcat配置、性能、安全等方面的调优处理,所以不会有长篇大论,毕竟如今已经是java -jar的时代了~ ~ ~

    本文会不定期更新完善

    1、隐藏版本号

    进入tomcatlib目录找到catalina.jar文件

    unzip catalina.jar
    

    之后会多出两个文件夹
    进入org/apache/catalina/util编辑配置文件ServerInfo.properties
    修改为

    server.info=Apache Tomcat
    server.number=0.0.0.0
    server.built=Nov 7 2016 20:05:27 UTC
    

    将修改后的信息压缩回jar包

    cd  /tomcat/lib
    jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
    

    2、禁用不安全的方法

    tomcat限制不安全http方法,如putdelete等等,设置方法在conf/web.xml里添加限制如下格式:

    <security-constraint> 
            <web-resource-collection> 
                <url-pattern>/*</url-pattern> 
                <http-method>PUT</http-method> 
                <http-method>DELETE</http-method> 
                <http-method>HEAD</http-method> 
                <http-method>OPTIONS</http-method>  
                <http-method>TRACE</http-method> 
            </web-resource-collection> 
            <auth-constraint> 
            </auth-constraint> 
    </security-constraint>
    

    3、错误页面跳转

    tomcat404、502、403等等错误页面的跳转设置为指定跳转页面,设置方法在conf/web.xml里添加跳转如下格式:

        <error-page> 
            <exception-type>java.lang.Exception</exception-type> 
            <location>/404.html</location> 
        </error-page> 
        <error-page> 
            <error-code>404</error-code> 
            <location>/404.html</location> 
        </error-page> 
        <error-page> 
            <error-code>400</error-code> 
            <location>/404.html</location> 
        </error-page> 
        <error-page> 
            <error-code>500</error-code> 
            <location>/404.html</location> 
        </error-page> 
    

    4、使tomcat支持软链接

    修改conf/context.xml文件:

    tomcat7配置方法:

    <!-- The contents of this file will be loaded for each web application -->
    <Context allowLinking="true">
    

    tomcat8配置方法:

    <Context>
        <Resources allowLinking="true" />
    </Context>
    

    5、tomcat增加http安全响应头

    修改web.xml文件:

    配置方法:

        <filter>
            <filter-name>httpHeaderSecurity</filter-name>
            <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
            <async-supported>true</async-supported>
            <init-param>
              <param-name>antiClickJackingEnabled</param-name>
              <param-value>true</param-value>
            </init-param>
            <init-param>
              <param-name>antiClickJackingOption</param-name>
              <param-value>SAMEORIGIN</param-value>
            </init-param>
            <init-param>
              <param-name>blockContentTypeSniffingEnabled</param-name>
              <param-value>false</param-value>
            </init-param>
        </filter>
    
        <filter-mapping>
            <filter-name>httpHeaderSecurity</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    

    6、禁用管理端,强制或使用nginx配置规则

    • 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件(强制)
    • 删除{Tomcat安装目录}/webapps下默认的所有目录和文件(强制)

    7、Server header重写

    tomcat HTTP端口直接提供web服务时此配置生效,加入此配置,将会替换http响应Server header部分的默认配置,默认是Apache-Coyote/1.1

    修改conf/server.xml

        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" 
                   server="webserver" />
    

    8、访问日志规范

    开启Tomcat默认访问日志中的RefererUser-Agent记录,一旦出现安全问题能够更好的根据日志进行问题排查;
    X-Forwarded-For用于nginx作为反向代理服务器时,获取客户端真实的IP

    修改conf/server.xml

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%{X-Forwarded-For}i %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false" />
    

    9、tomcat设置字符集UTF-8

    修改conf/server.xml

    <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" URIEncoding="UTF-8" />
    

    10、修复某些项目Java中文字体不显示(中文乱码问题)

    这种情况有可能是项目代码以及项目编译时的编码问题,也有可能是项目使用了特殊的中文字体,如果有特殊的中文字体,需要将字体文件放到jdk目录下

    例如:
    jdk中新建目录

    /jdk1.8.0_191/jre/lib/fonts/fallback
    

    将系统中simsun.ttc字体文件拷贝到此目录,并重命名为simsun.ttf

    11、tomcat遵循JVM的delegate机制

    修改conf/context.xml

    <Loader delegate="true"/>
    </Context>
    

    Loader对象可出现在Context中以控制Java类的加载。属性:delegate、含义:True代表使用正式的Java代理模式(先询问父类的加载器);false代表先在Web应用程序中寻找。默认值:FALSE

    True,表示tomcat将遵循JVMdelegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。

    False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

    12、未完待续。。。

  • 相关阅读:
    string截断
    winform截屏
    android自定义tabhost,tabcontent用intent获得
    Eclipse引入jar包的三种方式
    jquery dataTable的学习
    jquery datatable 参数
    Sql Server中三种字符串合并方法的性能比较
    sql表设计
    开发守则
    App Store2016年最新审核规则
  • 原文地址:https://www.cnblogs.com/ssgeek/p/12133552.html
Copyright © 2020-2023  润新知