Tomcat 2:Tomcat 配置基础(单机 Tomcat 相关配置)

二:Tomcat 配置基础(单机 Tomcat 相关配置)

实际中基本不会用到 standalone 的模式,因为用户不会直接访问 Tomcat,而是访问负载均衡,再由 Nginx 等负载均衡应用来转发需要 tomcat 处理的动态请求,再由负载均衡转发 tomcat 响应给客户端;
该文档旨在了解和熟悉各功能的实现方式;

2.1:部署一个应用

2.1.1:创建 test 应用

  • 创建工程目录:
[root@node105 ~]# mkdir /projects/testapp -pv
mkdir: created directory ‘/projects’
mkdir: created directory ‘/projects/testapp’
  • 编辑 testapp 的欢迎页 index.jsp:
[root@node105 ~]# vim /projects/testapp/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>testapp</title>
</head>
<body>

<%
out.println("Welcome to testapp");
%>
<br>
<%=request.getRequestURL()%>
</body>
</html>

2.1.2:部署 test 应用

  • 将 test 应用拷贝到 webapps:
[root@node105 ~]# cp /projects/testapp /usr/local/tomcat/webapps/ -r

2.1.3:访问 test 应用

  • 浏览器访问 testapp 欢迎页:http://192.168.1.105:8080/testapp/

在这里插入图片描述

2.2:Tomcat 欢迎页

2.2.1:测试欢迎页加载顺序

  • 配置 con/web.xml 中的 welcome-file-list,将其加载顺序设置为:index.html -> index.htm > index.jsp(默认就是此顺序);
  • webapps/ROOT 中添加 index.html,访问主页,查看是否访问的是 index.html;
  • 查看 conf/web.xml 的欢迎页全局配置:
[root@node105 tomcat]# vim conf/web.xml
……
<web-app>
    ……
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
  • 新增 index.html:
[root@node105 tomcat]# vim webapps/ROOT/index.html
<h1> Welcom Page (index.html) </h1>
  • 访问测试:

在这里插入图片描述

2.2.2:测试 web.xml 的专有覆盖全局

webapp 的专有 web.xml 会覆盖 conf/web.xml 中的全局配置;

  • 配置 webapp 的专有 web.xml:

    设置欢迎页加载顺序为:index.jsp -> index.htm -> index.html;

[root@node105 tomcat]# vim webapps/ROOT/WEB-INF/web.xml
……
<web-app>
  ……
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>

</web-app>
  • 重新访问:

在这里插入图片描述

2.2.3:为 testapp 添加专有的 web.xml

  • 为 testapp 添加 index.html 欢迎页:
[root@node105 ~]# cd /usr/local/tomcat/
[root@node105 tomcat]# vim webapps/testapp/index.html
<h1> Welcom testapp index.html </h1>
  • 访问测试:

    testapp 默认会调用全局配置;

在这里插入图片描述

  • 为 testapp 创建自己专用的 web.xml:
[root@node105 tomcat]# mkdir webapps/testapp/WEB-INF
[root@node105 tomcat]# cp webapps/ROOT/WEB-INF/web.xml webapps/testapp/WEB-INF
  • 再次访问 testapp 欢迎页:

    此次调用自己专有的 web.xml;

在这里插入图片描述

2.3:shutdown 安全加固

2.3.1:默认 shutdown 配置的安全隐患

  • 默认配置:
[root@node105 tomcat]# vim conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
  • 查看 8005 的监听地址:
[root@node105 tomcat]# ss -tnl | grep 8005
LISTEN     0      1         ::ffff:127.0.0.1:8005                    :::*
  • Telnet 本机的 8005 端口,传送 SHUTDOWN 指令:

    发送 SHUTDOWN 后会直接关闭 Tomcat 进程实例;

[root@node105 tomcat]# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.

[root@node105 tomcat]# ps -ef | grep tomcat | grep -v grep
[root@node105 tomcat]#

所以在实际应用中,要将管理端口更改为其它端口,或设置 shutdown 指令为随机字符串;

2.3.2:设置 shutdown 为随机字符串

  • 生成随机字符串:

    生成 /etc/issue 的 md5 值;

[root@node105 tomcat]# md5sum /etc/issue
f078fe086dfc22f64b5dca2e1b95de2c  /etc/issue
  • 配置 server.xml
[root@node105 tomcat]# vim conf/server.xml 
<Server port="8005" shutdown="f078fe086dfc22f64b5dca2e1b95de2c">
  • 启动 Tomcat
[root@node105 tomcat]# bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
  • 再次 telnet 并发送 SHUTDOWN:

    无法关闭 Tomcat 进程;

[root@node105 tomcat]# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.
[root@node105 tomcat]# ps -ef | grep tomcat | grep -v grep
root       8116      1  1 15:58 pts/0    00:00:03 /usr/java/default/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
  • 使用指定字符串进行关闭:
[root@node105 tomcat]# telnet 127.0.0.1 8005              
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
f078fe086dfc22f64b5dca2e1b95de2c
Connection closed by foreign host.
[root@node105 tomcat]# 
[root@node105 tomcat]# 
[root@node105 tomcat]# ps -ef | grep tomcat | grep -v grep
[root@node105 tomcat]# 

修改 shutdown= 为随机字符串后,启动Tomcat时,8005和8009端口启动很慢,解决办法:

[root@node105 tomcat]# vim /usr/java/default/jre/lib/security/java.security
securerandom.source=file:/dev/urandom

2.4:Tomcat 管理功能配置

在 Tomcat 的 index.jsp 欢迎页中有三个超链接,分别为:

  • Server Status:实例状态信息;
  • Manager App;该 Tomcat 下的各 webapp 管理;
  • Host Manager;虚拟主机管理;

默认配置下是不能访问的,需要添加拥有 manager-gui 和 admin-gui 角色的相应用户;

2.4.1:GlobalNamingResources

用户和角色是在 conf/tomcat-users.xml 中定义的,而调用此配置文件的相关配置是在 server.xml 中的 GlobalNamingResources 配置断种定义的。

  • 配置示例:
<Server port="8005" shutdown="SHUTDOWN">
  ……
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
</Server>

2.4.2:查看管理页面的报错与提示信息

  • “Server Status”:

在这里插入图片描述

  • “Manager App”:

在这里插入图片描述

  • “Host Manager”:

在这里插入图片描述

  • 由提示信息得知:
    “Server Status” 和 “Manager App” 页面需要拥有 manager-gui 角色权限的用户才能访问;
    “Host Manager” 页面需要拥有 admin-gui 角色权限的用户才能访问;

2.4.3:配置管理角色与用户

  • 编辑 conf/tomcat-users.xm,添加 manager-gui 和 admin-gui 角色,并将这两个角色赋予管理用户:
[root@node105 tomcat]# vim conf/tomcat-users.xml
  ……
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="jerome" password="jerome" roles="manager-gui,admin-gui"/>
</tomcat-users>
  • 编辑 webapps/manager/META-INF/context.xml,添加允许访问 manager 应用的 IP 地址:

    经测试,manager 应用提供 “Server Status” 和 “Manager App” 页面;
    添加 192.168.1 网段的 IP 地址允许访问;

[root@node105 tomcat]# vim webapps/manager/META-INF/context.xml
……
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.1\.\d+" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$
1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
  • 编辑 webapps/host-manager/META-INF/context.xml,添加允许访问 host-manager 应用的 IP 地址:

    host-manager 应用提供 “Host Manager” 页面;

[root@node105 tomcat]# vim webapps/host-manager/META-INF/context.xml
……
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.1\.\d+" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$
1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

2.4.4:访问管理页面

  • “Server Status”:

在这里插入图片描述

  • “Manager App”:

在这里插入图片描述

  • “Host Manager”:

在这里插入图片描述

2.5:Host 虚拟主机配置

目前的 Tomcat 只有一个虚拟主机,即 localhost;

添加一个 Host,指定其应用目录为 /data/webapps,并将 Tomcat 的 sample.war 部署到其中;

2.5.1:创建应用目录并部署 sample.war

  • 创建应用目录以及 ROOT:
[root@node105 ~]# mkdir -pv /data/webapps/ROOT
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/webapps’
mkdir: created directory ‘/data/webapps/ROOT’
  • 部署 sample.war 到 /data/webapps/ROOT:
[root@node105 ~]# cd /data/webapps/ROOT
[root@node105 ROOT]# jar xf /root/sample.war 
[root@node105 ROOT]# ll
total 8
-rw-r--r-- 1 root root 376 Jul 30  2007 hello.jsp
drwxr-xr-x 2 root root  23 Jul 30  2007 images
-rw-r--r-- 1 root root 636 Jul 30  2007 index.html
drwxr-xr-x 2 root root  24 Jul 30  2007 META-INF
drwxr-xr-x 4 root root  44 Jul 30  2007 WEB-INF

2.5.2:添加虚拟主机

添加一个名为 node105.yqc.com 的 Host;

  • 编辑 conf/server.xml,添加 Host 配置:
[root@node105 tomcat]# vim conf/server.xml
……
      </Host>
      <Host name="node105.yqc.com"  appBase="/data/webapps"
            unpackWARs="true" autoDeploy="true" />
……
  • 重启 Tomcat:
[root@node105 tomcat]# su java -c "bin/shutdown.sh"
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   

[root@node105 tomcat]# su java -c "bin/startup.sh" 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
  • 查看虚拟主机管理页面:

    显示已添加成功;

在这里插入图片描述

2.5.3:访问 sample 应用

  • 编辑客户端 PC 的 HOSTS 文件:

    C:\Windows\System32\drivers\etc\HOSTS

192.168.1.105 node105.yqc.com
  • 访问测试:

    http://node105.yqc.com:8080/

在这里插入图片描述

2.6:Context 配置

为 node105.yqc.com 虚拟主机添加一个 testapp 应用,设置其路径为 /data/testapp;

P.S.
node105.yqc.com 的应用目录为 /data/webapps,如果不配置 Context,那么访问 http://node105.yqc.com:8080/testapp,就会到 /data/webapps/testapp 查找应用文件;

2.6.1:部署 testapp

  • 拷贝 testapp 应用到 /data 下,并创建软链接:

    使用软链接访问应用程序,可以更好地进行版本更新和回退;

[root@node105 ~]# cp -r /usr/local/tomcat/webapps/testapp/ /data/testapp_v1

[root@node105 ~]# ln -sv /data/testapp_v1/ /data/testapp
‘/data/testapp’ -> ‘/data/testapp_v1/’

[root@node105 ~]# ll /data
total 0
lrwxrwxrwx 1 root root 17 Dec  9 18:20 testapp -> /data/testapp_v1/
drwxr-xr-x 3 root root 53 Dec  9 18:20 testapp_v1
drwxr-xr-x 3 root root 17 Dec  9 17:44 webapps

2.6.2:添加 Context 配置

  • 编辑 conf /server.xml,为 node105.yqc.com 添加 Context 配置:
[root@node105 tomcat]# vim conf/server.xml
……
      <Host name="node105.yqc.com"  appBase="/data/webapps"
            unpackWARs="true" autoDeploy="true" >
        <Context path="/testapp" docBase="/data/testapp" reloadable="false" />
      </Host>
……
  • 重启 Tomcat:
[root@node105 tomcat]# su java -c "bin/shutdown.sh"
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
[root@node105 tomcat]# 
[root@node105 tomcat]# su java -c "bin/startup.sh" 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

2.6.3:访问 testapp

  • 编辑 node105.yqc.com 的 testapp 欢迎页,以区分 localhost 的 testapp:
[root@node105 ~]# vim /data/testapp/index.html 
<h1> Welcom node105-testapp index.html </h1>
  • 浏览器访问 http://node105.yqc.com:8080/testapp/

在这里插入图片描述

这里是虚拟主机 node105.yqc.com 提供的 testapp 应用,不是之前的 localhost 虚拟主机提供的;

  • localhost 的 testapp 应用:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值