# Tomcat安装配置

# 获取tomcat安装包

# 下载tomcat

  1. 访问https://tomcat.apache.org/download-80.cgi (opens new window)下载需要的tomcat版本,推荐下载:apache-tomcat-8.5.7x.zip (opens new window)
  2. 或点击这里 (opens new window)下载

# 解压tomcat安装包

解压缩apache-tomcat-8.5.70.zip后:

  1. 清理不需要的文件,需要删除webapps目录下的所有子目录,包括ROOTmanager
  2. 对于macOS或Linux平台,需要让sh文件都是可执行的,在tomcat目录中执行命令行:chmod +x bin/*.sh
  3. 将WAR包改名为ROOT.war放到tomcat的webapps目录下

# 设置启动环境变量

linux、macOS平台在bin目录下新建setenv.sh文件,内容如下:

#!/bin/sh

# 设置语言为中文
export LANG=zh_CN.UTF-8

# 设置java最大内存
export JAVA_OPTS="$JAVA_OPTS -Xmx4G"

# 设置工作目录,参考《工作目录和默认数据库配置》
export JAVA_OPTS="$JAVA_OPTS -Dsucc.workdir=/path/to/workdir(请修改这个路径)"

# 设置其他环境变量
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true"

windows是setenv.bat,内容如下:

rem 设置java最大内存
set "JAVA_OPTS=%JAVA_OPTS% -Xmx4G"

rem 设置工作目录,参考《工作目录和默认数据库配置》
set "JAVA_OPTS=%JAVA_OPTS% -Dsucc.workdir=C:\path\to\workdir(请修改这个路径)"

rem 设置其他环境变量
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true"

# 安装JDBC驱动

JDBC驱动安装配置

# tomcat配置

# Tomcat安全性设置

/conf/web.xmlsesion-config节点配置cookie-config,增强Tomcat安全性:

  • http-only属性:当设置为true时,通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

    <session-config>
      <cookie-config>
        <http-only>true</http-only>
      </cookie-config>
    </session-config>
    
  • secure属性(仅限使用https协议时):当设置为true时,创建的Cookie会被以安全的形式向服务器传输,也就是只能在https连接中被浏览器传递到服务器端进行会话验证,不会被窃取到Cookie的具体内容。

    WARNING

    使用http协议的情况下,设置securetrue会导致Cookie无法发送给服务器,请确认当前使用的协议为https

    <session-config>
        <cookie-config>
          <secure>true</secure>
        </cookie-config>
    </session-config>
    
  • Tomcat AJP协议文件包含/文件读取漏洞:Tomcat AJP协议存在缺陷,攻击者利用该漏洞可通过构造特定参数,读取webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行

    解决方法1:

    升级Tomcat至7.0.1008.5.519.0.31以后的版本,新版本中已经修复了该漏洞

    解决方法2

    /conf/web.xml中注释AJP配置,禁用AJP协议端口

    <!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    -->
    
  • SameSite属性:Cookie的SameSite属性用来限制第三方Cookie,从而减少安全风险,可以设置以下3种值:

    • Strict:最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送Cookie
    • Lax:规则稍稍放宽,大多数情况也是不发送第三方Cookie,但是导航到目标网址的Get请求除外
    • None:不限制第三方Cookie,前提是必须同时设置Secure属性

    可根据实际需求,在conf/context.xml中配置属性值

    <CookieProcessor  sameSiteCookies="Strict"/>
    

# 优化Tomcat性能

优化tomcat性能,避免tomcat出现如下警告:

21-Nov-2019 15:54:04.600 警告 [TimerService-Timer] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/resources/sysdata/settings/templates/fapp/GZRWGL/package.json]的资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。

将位于conf目录下的context.xml改为如下:

<Context reloadable="false" containerSciFilter="jasper">
    <!-- 启动时不要扫描jar,启动时间短一些-->
    <JarScanner scanManifest="false" scanClassPath="false" scanAllDirectories="false" scanAllFiles="false" scanBootstrapClassPath="false" />

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- 配置tomcat缓存静态资源,200mb-->
    <Resources cachingAllowed="true" cacheMaxSize="200000" />
</Context>

# 修改Tomcat端口号(可选)

优化网络传输,修改/conf/server.xml中的Connector添加自动压缩功能,并按需修改tomcat端口号:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               compression="on"
               compressionMinSize="1024"
               compressableMimeType="text/plain,text/json,application/json"
               />

# 修改Tomcat会话超时时间(可选)

当用户在一定时间内都未进行操作时,为了更好的利用资源,系统会自动注销该用户,修改/conf/web.xml中的session-timeout可设置该会话超时时间,默认为30分钟,负数或0为不限制超时时间:

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

# 常见问题

# Windows下tomcat控制台乱码

问题原因:使用startup.bat启动tomcat时,它会读取catalina.bat的代码并打开一个新终端运行,而Windows命令行终端的默认编码为GBK,与tomcat的默认字符集UTF-8不一致

解决方法(任选其一):

  1. 修改/bin/startup.bat中的启动参数,将start修改为run,在运行startup.bat后不会打开新的控制台
call "%EXECUTABLE%" run %CMD_LINE_ARGS%
  1. 修改系统注册表,规定名称为Tomcat的命令行终端字符编码为UTF-8,具体步骤如下:

    1. Windows + R打开运行,在运行框中输入regedit,进入注册表编辑器中
    2. HKEY_CURRENT_USER>Console>Tomcat(若不存在则创建)中修改CodePage为十进制的65001
是否有帮助?
0条评论
评论