# Tomcat安装配置
# 获取tomcat安装包
# 下载tomcat
- 访问https://tomcat.apache.org/download-80.cgi (opens new window)下载需要的tomcat版本,推荐下载:apache-tomcat-8.5.7x.zip (opens new window)。
- 或点击这里 (opens new window)下载
# 解压tomcat安装包
解压缩apache-tomcat-8.5.70.zip后:
- 清理不需要的文件,需要删除webapps目录下的所有子目录,包括
ROOT
、manager
等 - 对于macOS或Linux平台,需要让sh文件都是可执行的,在tomcat目录中执行命令行:
chmod +x bin/*.sh
- 将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"
WARNING
windows配置工作目录路径时,盘符需要为大写,如C:\path\to\workdir,否则系统设置会提示异常。
# 安装JDBC驱动
# tomcat配置
# Tomcat安全性设置
在/conf/web.xml
中sesion-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协议的情况下,设置
secure
为true
会导致Cookie无法发送给服务器,请确认当前使用的协议为https<session-config> <cookie-config> <secure>true</secure> </cookie-config> </session-config>
Tomcat AJP协议文件包含/文件读取漏洞:Tomcat AJP协议存在缺陷,攻击者利用该漏洞可通过构造特定参数,读取webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行
解决方法1:
升级Tomcat至
7.0.100
、8.5.51
、9.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
不一致
解决方法(任选其一):
- 修改
/bin/startup.bat
中的启动参数,将start
修改为run
,在运行startup.bat
后不会打开新的控制台
call "%EXECUTABLE%" run %CMD_LINE_ARGS%
修改系统注册表,规定名称为
Tomcat
的命令行终端字符编码为UTF-8
,具体步骤如下:Windows
+R
打开运行
,在运行框中输入regedit
,进入注册表编辑器中- 在HKEY_CURRENT_USER>Console>Tomcat(若不存在则创建)中修改
CodePage
为十进制的65001