Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。本文将详细讲解tomcat在linux环境(以CentOS为例)中的安装与配置。

安装jdk

  JDK是java Development Kit的缩写,即java语言的软件开发包,是javac、javap、jdb等开发、调试、编译工具。
  OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,可以用于商业用途,于2009年正式发布。它是基于JDK7的beta版开发,但为了也将java SE 6开源,从OpenJDK7的b20构建反向分之开发,从中剥离了不符合java SE 6规范的代码,发布了OpenJDK 6。所以OpenJDK6和JDK6没有关系。
  在CentOS中,可以选择yum安装openjdk

yum install java-1.8.0-openjdk

  通过java -version可以看到版本信息为

openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8,0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04,mixed mode)

  也可以去Oracle官网下载JDK 8的rpm包安装(需要注册)

yum install jdk-8u191-linux-x64,rpm

  而通过java -version看到版本信息为

[root@localhost ~]#  java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

部署tomcat

  确定JDK版本之后,我们就可以准备开始部署tomcat了。
  首先要去官网下载源码包,国内用的是清华大学的镜像下载地址,下载速度还是可以接受的。
  生产中我们一般不会选用最新版的tomcat9,而是选用tomcat8更为稳妥。tomcat8的下载链接是http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz

  解压到想要安装的任意指定目录,例如/apps/tomcat/目录

tar xvf apache-tomcat-8.5.47.tar.gz -C /apps/

  更改目录名称(也可以用软连接方式)。

mv /apps/apache-tomcat-8.5.47 /apps/tomcat

配置环境变量

  jdk需要配置环境变量才可以找到,否则会无法访问jsp文件。
  需要在环境变量配置文件中加入

export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH

  于是,运行下面命令即可

cat > /etc/profile.d/jdk.sh <<"END"
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
END

  运行命令使环境变量生效

. /etc/profile.d/jdk.sh

修改进程属主

  一般来说,tomcat服务如果以root身份启动,风险还是很高的,因为tomcat本身bug还是有不少的,如果被别有用心之人加以利用,入侵进来,就可以获得root权限,这造成的后果绝对是灾难级的,这甚至会威胁到其他服务器的安全。为了规避这一风险,我们一般都会将tomcat服务以一个系统用户的身份启动,例如java用户。
  创建java用户useradd -r java
  更改服务目录的属主属组chown -R tomcat/*
  启动服务时,我们使用命令su - java -c '/apps/tomcat/bin/startup.sh'来启动,就可以以java用户的身份来启动进程了。

配置文件

  tomcat中配置文件目录在tomcat/conf/server.xml,其中需要注意的是:

<Server port="8005" shutdown="SHUTDOWN">

  这代表管理端监听在8005端口,向管理端发送SHUTDOWN指令就会是tomcat直接终止,而且这是不需要密码权限控制的。如果在生产环境中,如果有任何人有意或者无意向tomcat服务器的8005端口发送了SHUTDOWN指令,整个服务都会被终止掉,,而且还不需要密码验证,这对我们的影响无疑是巨大的,所以我们通常都会将此处的管理监听端口改掉,或将shutdown指令设为别的复杂口令,让别人无法轻易或不小心将我们的服务器shutdown~
  可采取MD5值的方式,选任一文件做MD5运算后得到的随机数值即为口令。

sed -i "s@SHUTDOWN@`md5sum /root/.ssh/authorized_keys |cut -d' ' -f1`@" tomcat/conf/server.xml

  此时,就可以通过安装目录下的tomcat/bin/startup.sh来启动tomcat服务了。

su - java -c ' /apps/tomcat/bin/startup.sh'

  然后查看端口

ss -tanl

  即可看到8080端口已经处于监听状态了

[root@localhost ~]# ss -tanl
State       Recv-Q Send-Q                     Local Address:Port                                    Peer Address:Port              
LISTEN      0      128                                    *:22                                                 *:*                  
LISTEN      0      100                            127.0.0.1:25                                                 *:*                  
LISTEN      0      100                                   :::8009                                              :::*                  
LISTEN      0      100                                   :::8080                                              :::*                  
LISTEN      0      128                                   :::22                                                :::*                  
LISTEN      0      100                                  ::1:25                                                :::*                  
LISTEN      0      1                       ::ffff:127.0.0.1:8005                                              :::*                  
[root@localhost ~]# 

  访问tomcat服务器的ip的8080端口,可看到如下图所示界面,即表示tomcat安装成功。
在这里插入图片描述
  不过,想使用tomcat自带的Manager App及Host Manager工具,还需要做一些额外的配置,此时如果直接访问会显示403权限拒绝,如下图所示。
在这里插入图片描述

修改应用访问控制

  错误提示说明已经说得很明白了,首先确保已经修改了应用的反问控制权限,,如果还没有,you’ll need to edit the Manager’s context.xml file。
  那这个context.xml在哪里呢?它是指应用的上下文设置文件,路径就是tomcat目录下的webapps/manager/META-INF/context.xml文件,另一个应用Host Manager的路径就是tomcat目录下的webapps/host-manager/META-INF/context.xml
  所以我们要修改这两个配置文件中的访问控制,将我们的访问IP加到里面,这样我们的访问IP才有权限去访问这两个管理应用。

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172.18.*|192.168.32.*" />

  在allow=标签后面,加上我们的ip,支持通配符写法和PCRE格式的正则表达式写法,用|隔开。两个应用的配置文件都要修改。

创建权限角色

光将我们的来访IP加入许可白名单还是不够的,我们还需要一个有权限的账户才可以访问这些管理工具
路径是tomcat目录下的conf/tomcat-users.xml文件。

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
    <role rolename="manager-gui"/>
    <role rolename="admin-gui"/>
    <user username="admin" password="123456" roles="manager-gui,admin-gui"/>

  在下面加入后三行,先创建角色"manager-gui""admin-gui",分别是Manager App的管理员和Host Manager的管理员。然后设置用户名密码及其所处的角色,也可以设置两个不同的用户来分别充当这两个角色。用户名密码可自行设置。

    <role rolename="manager-gui"/>
    <role rolename="admin-gui"/>
    <user username="admin" password="123456" roles="manager-gui,admin-gui"/>

  有了管理员权限的账户,在被允许的客户端上就可以访问Manager AppHost Manager这两个工具了。点击图标访问,出现如下图所示的提示输入用户名密码弹窗,说明配置正确。
在这里插入图片描述

附:一键部署tomcat脚本

  附上我自己用的tomcat脚本供大家参考(未配置管理工具)

DST="/apps"
[ -a jdk-8u231-linux-x64.rpm ] || { echo ' the absence of jdk' ;exit 1;}
[ -d $DST/*tomcat* ] && { echo "tomcat is aready installed into $DST/tomcat" ;exit 2;}
id java &>/dev/null && { echo 'user java is exist,redis is aready installed' ; exit 3;}
iptables -F
systemctl disable firewalld
sed -i '@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
setenforce 0
mkdir -p /data$DST
#mkdir -p $DST
ln -s /data$DST $DST
yum install jdk-8u231-linux-x64.rpm
tar xf *tomcat-*.tar.* -C $DST/
mv $DST/*tomcat-* $DST/tomcat
sed -i "s@SHUTDOWN@`md5sum /root/.ssh/authorized_keys |cut -d' ' -f1`@" $DST/tomcat/conf/server.xml
cat > /etc/profile.d/jdk.sh <<"END"
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
END
. /etc/profile.d/jdk.sh
useradd -r java
chown -R java.java $DST/tomcat/*
su - java -c '$DST/tomcat/bin/startup.sh'

一个低调的男人