Tomcat版本:Apache Tomcat/8.5.41
部署环境:CentOS Linux release 7.4
场景:单机多实例部署应用(操作步骤在“附一”中介绍)
前提:以下问题及解决方案均以tomcat启动成功为前提
1、应用tomcat启动后无法通过IP+端口的形式访问Tomcat的欢迎界面
2、进行Tomcat欢迎界面后,点击“Manager App”,访问被拒绝,报错“403 Access Denied”
3、应用tomcat映射服务器目录,访问时报404错误
1、无法进入Tomcat欢迎界面的问题解决
使用的是单机多实例配置,很可能像我一样忘记拷贝webapps目录下的文件到应用tomcat,因为通过IP+端口的形式访问,实际上请求的是webapps/ROOT/index.jsp。
2、点击tomcat管理页面下的Server Status、Manager App、Host Manager,访问被拒绝
(1)首先,在tomcat的conf/tomcat-user.xml中的
(2)如果此时仍然出现403 Access Denied错误,很可能是访问的IP受限。打开/webapps/manager/META-INF/目录下context.xml文件,将下面的内容删除或注释掉:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
同理,访问“Host Manager”修改同上。
3、配置了目录映射,通过tomcat实现简单文件访问,但访问时报404错误
修改tomcat的conf/web.xml中
阅读以下内容需要对tomcat的部署有一定的了解,因为我描述得会比较简单。
1、下载并解压tomcat到安装目录
2、在某个目录下创建应用tomcat目录,比如tomcat1、tomcat2、tomcat3……
3、分别拷贝tomcat安装目录下的conf文件到应用tomcat目录(用于不同的实例配置),修改server.xml中的相关端口号
4、分别拷贝tomcat安装目录下的webapps文件到应用tomcat目录(否则启动后无法访问tomcat主页界面)
5、分别在应用tomcat目录下创建bin目录,并编写startup.sh和shutdown.sh脚本,内容可参考如下:
(1)startup.sh
#!/bin/bash
export JRE_HOME=/usr/local/tools/java/jdk1.8.0_161/jre
export CATALINA_HOME=/tomcat/tomcat_base
export CATALINA_BASE="/tomcat/tomcat_8000_file"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
export JAVA_OPTS="-server -Xms512m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat_8000_file"
#创建logs目录
if [ ! -d "$CATALINA_BASE/logs" ]; then
mkdir $CATALINA_BASE/logs
fi
#创建temp目录
if [ ! -d "$CATALINA_BASE/temp" ]; then
mkdir $CATALINA_BASE/temp
fi
# 调用tomcat启动脚本
bash $CATALINA_HOME/bin/startup.sh "$@"
(2)shutdown.sh
#!/bin/bash
export JRE_HOME=/usr/local/tools/java/jdk1.8.0_161/jre
export CATALINA_HOME=/tomcat/tomcat_base
export CATALINA_BASE="/tomcat/tomcat_8000_file"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
bash $CATALINA_HOME/bin/shutdown.sh "$@"
6、添加shell文件的执行权限后执行启动、停止
业务:文件上传下载
场景:tomcat升级到8.5版本后,下载文件报错“403 Forbidden”
如果之前的版本访问正常,多半是tomcat8.5的umask导致的。tomcat 8.5的catalina.sh中搜索 umask关键字,找到如下内容
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
UMASK="0027"
fi
umask $UMASK
umask 0027的对应的目录权限是750,文件权限是640。
输入umask命令,显示0022,即系统默认文件权限,其目录权限为755,文件权限为644;如果系统默认umask为0002,其目录权限为775,文件权限为664。
较低版本的tomcat,默认umask为0022,升级到8.5版本后,umask的设值导致了以上问题,可将catalina.sh中相应值改为0022,问题解决。
注:
1、关于linux权限相关知识请自行了解
2、文件默认权限:umask的相关知识自行了解
3、umask值和目录权限之间的关系,除了umask的第1位,各位数字相加等于7