web服务之Tomcat管理配置

应用部署实现

WebApp应用的归档格式

.war:WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等
.jar:EJB类文件的打包压缩类zip格式文件,,包括很多的class文件, 网景公司发明
.rar:资源适配器类打包文件,目前已不常用
.ear:企业级WebApp打包,目前已不常用

传统应用开发测试后,通常打包为war格式,这种文件部署到Tomcat的webapps目录下,并默认会自动解包展开和部署上线。

#conf/server.xml中文件配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

部署方式

部署Deploy:将webapp的源文件放置到目标目录,通过web.xml和context.xml文件中配置的路径就可以访问该webapp,通过类加载器加载其特有的类和依赖的类到JVM上,即:最终用户可以
通过浏览器访问该应用
   自动部署:Tomcat一旦发现多了一个web应用APP.war包,默认会自动把它解压缩,加载并
   启动起来
   手动部署
       冷部署:将webapp放到指定目录,才去启动Tomcat服务
       热部署:Tomcat服务不停止,需要依赖manager、ant脚本、tcd(tomcat clientdeployer)等工具
反部署undeploy:停止webapp运行,并从JVM上清除已经加载的类,从Tomcat应用目录中移除
部署的文件
启动start:是webapp能够访问
停止stop:webapp不能访问,不能提供服务,但是JVM并不清除它

部署WebApp的目录结构

常见开发项目目录组成

#目录结构一般由开发用工具自动生成,以下模拟生成相关目录
[root@centos8 tomcat]#  mkdir projects/myapp/{WEB-INF,META-INF,classes,lib} -pv
mkdir: 已创建目录 "projects"
mkdir: 已创建目录 "projects/myapp"
mkdir: 已创建目录 "projects/myapp/WEB-INF"
mkdir: 已创建目录 "projects/myapp/META-INF"
mkdir: 已创建目录 "projects/myapp/classes"
mkdir: 已创建目录 "projects/myapp/lib"

#常见应用首页,内容就用前面的test.jsp内部
[root@centos8 tomcat]#  vi projects/myapp/index.jsp

#手动复制项目目录到webapps目录下去
[root@centos8 tomcat]#  cp -r projects/myapp/ /usr/local/tomcat/webapps/

#注意权限和属性
[root@centos8 tomcat]# chown -R tomcat.tomcat /usr/local/tomcat/webapps/myapp

#访问http://YourIP:8080/myapp/

案例:手动的应用部署

部署主页目录下的应用WebApp

[root@centos8 tomcat]# vim webapps/ROOT/test.jsp
[root@centos8 tomcat]# cat webapps/ROOT/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println("hello jsp");
%>
<br>
<%=request.getRequestURL()%>
</body>
</html>

[root@centos8 tomcat]# curl http://127.0.0.1:8080/test.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
hello jsp
<br>
http://127.0.0.1:8080/test.jsp
</body>
</html>
[root@centos8 tomcat]#tree work/Catalina/localhost/ROOT/
work/Catalina/localhost/ROOT/
└── org
    └── apache
        └── jsp
            ├── test_jsp.class
            └── test_jsp.java
3 directories, 2 files
[root@centos8 tomcat]#

部署一个子目录的应用WebApp

[root@centos8 tomcat]# pwd
/usr/local/tomcat
[root@centos8 tomcat]# mkdir webapps/app1/
#利用之前实验的文件生成新应用
[root@centos8 tomcat]# cp -p webapps/ROOT/test.jsp webapps/app1/
[root@centos8 tomcat]# chown -R tomcat.tomcat webapps/app1/
[root@centos8 tomcat]# tree webapps/app1/
webapps/testapp1/
└── test.jsp
0 directories, 1 file
[root@centos8 tomcat]# curl http://127.0.0.1:8080/app1/test.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
hello jsp
<br>
<%=request.getRequestURL()%>
</body>
</html>

[root@centos8 tomcat]# tree work/Catalina/localhost/app1/
work/Catalina/localhost/app1/
└── org
    └── apache
        └── jsp
            ├── test_jsp.class
            └── test_jsp.java
3 directories, 2 files
[root@centos8 tomcat]#
#删除应用
[root@centos8 tomcat]# rm -rf webapps/app1/
[root@centos8 tomcat]# ls webapps/
docs examples host-manager manager ROOT
[root@centos8 tomcat]# ls work/Catalina/localhost/
docs examples host-manager manager ROOT

基于WEB的管理Server status和Manager APP实现应用部署

tomcat 提供了基于WEB的管理页面,默认由 tomcat-admin-webapps.noarch包提供相关文件

实现WEB的管理Server status和Manager APP

打开浏览器可以访问tomcat管理的默认管理页面,点击下图两个按钮都会出现下面提示403的错误提示默认的管理页面被禁用,启用方法如下

[root@centos8 tomcat]# ls conf/
Catalina context.xml logging.properties tomcat-users.xml
catalina.policy jaspic-providers.xml server.xml tomcat-users.xsd
catalina.properties jaspic-providers.xsd tomcat.conf web.xml
#查看配置信息
[root@centos8 tomcat]# cat conf/server.xml
<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>

用户认证,配置文件是conf/tomcat-users.xml。打开tomcat-users.xml,我们需要一个角色managergui

[root@centos8 tomcat]# vim 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"/>
    <user username="admin" password="123456" roles="manager-gui"/>
</tomcat-users>

#修改全局配置文件需要重启服务生效
[root@centos8 tomcat]# systemctl restart tomcat

修改webapps/manager/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<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" />
    <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreve
ntionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

查看正则表达式就知道是本地访问了,由于当前访问地址是192.168.x.x,可以修改正则表达式为

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172\.\.\d+\.\d+"

范例:

[root@centos8 tomcat]# vim webapps/manager/META-INF/context.xml
<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\.31\.0\.\d+" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apach
e\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.
(?:Linked)?HashMap"/>
</Context>
#修改WebApp的配置无需重启服务即可生效

再次通过浏览器访问两个按钮Server Status和Manager App,可以看到以下管理界面,输入前面的用户和密码进行登录

基于WEB应用程序管理器实现APP的部署

Web 应用程序管理界面可以实现以下功能
Applications 应用程序管理,可以启动、停止、重加载、反部署、清理过期session
Deploy 可以热部署,也可以部署war文件。

方式1: 指定目录部署软件
[root@centos8 ~]# mkdir -p /data/myapp/
[root@centos8 ~]# echo /data/myapp/index.html > /data/myapp/index.html

#按下面信息添写,实现下面链接的访问
http://172.31.0.8:8080/test1/

#自动将/data/myapp目录下的数据复制到webapps/test1下面
[root@centos8 ~]# tree /usr/local/tomcat/webapps/test1/
/usr/local/tomcat/webapps/test1/
└── index.html
0 directories, 1 file
[root@centos8 ~]# cat /usr/local/tomcat/webapps/test1/index.html
/data/myapp/index.html

方式2: 部署war包文件

常见配置详解

端口8005/tcp 安全配置管理

在conf/server.xml 有以下内容

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
     <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps"
              unpackWARs="true" autoDeploy="true">
        </Host>
     </Engine>
  </Service>
</Server>

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

8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个
字符串,tomcat接收到后就会关闭此Server。
此管理功能建议禁用,可将SHUTDOWN改为一串猜不出的字符串实现
或者port修改成 0, 会使用随机端口,如:36913

生产环境推荐使用:port设为-1等无效端口,将关闭此功能

此行不能被注释,否则无法启动tomcat服务

范例:

<Server port="8005" shutdown="44ba3c71d57f49xdffsgsfh65f28">

范例:修改8005/tcp端口管理命令

[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port
Peer Address:Port
LISTEN 0 128 0.0.0.0:22  0.0.0.0:*
LISTEN 0 100 *:8080      *:*
LISTEN 0 128 [::]:22     [::]:* 
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* 
LISTEN 0 100 *:8009 *:*
[root@centos8 ~]# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN #执行命令关闭tomcat
Connection closed by foreign host.

显示指定的http服务器版本信息

默认不显示tomcat的http的Server头信息, 可以指定tomcat的http的Server头信息为相应的值

#conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" Server="SOME STRING"/>

其它配置

conf/server.xml中可以配置service,connector, Engine,Host等

service配置
一般情况下,一个Server实例配置一个Service,name属性相当于该Service的ID。

<Service name="Catalina">

连接器配置

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

redirectPort,如果访问HTTPS协议,自动转向这个连接器。但大多数时候,Tomcat并不会开启HTTPS,因为Tomcat往往部署在内部,HTTPS性能较差

引擎配置

<Engine name="Catalina" defaultHost="localhost">

defaultHost 配置

defaultHost指向内部定义某虚拟主机。缺省虚拟主机可以改动,默认localhost。

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

多虚拟主机配置

多虚拟主机配置说明

name 必须是主机名,用主机名来匹配
appBase 当前主机的网页根目录,是相对于$CATALINA_HOME ,也可以使用绝对路径
unpackWARs 是否自动解压war格式
autoDeploy 热部署,自动加载并运行应用

虚拟主机配置过程

再添加和配置一个新的虚拟主机,并将myapp部署到/data/webapps目录下

[root@tomcat ~]# vim conf/server.xml
#在文件最后面增加下面内容
<Host name="web1.magedu.org" appBase="/data/webapps/" unpackWARs="True"
autoDeploy="false">

#虚拟主机专有访问日志
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="web1_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s
%b" />
</Host>

#以下行是自带的不需要修改
</Engine>
</Service>
</Server>
#或者如果不加日志也可以用下面简化写法
<Host name="web1.llongxuan.vip" appBase="/data/webapps/" unpackWARs="True"
autoDeploy="false"/>

准备虚拟主机的数据目录

常见虚拟主机根目录
# [root@tomcat ~]# mkdir /data/webapps/ROOT -pv
#[root@tomcat ~]#  chown -R tomcat.tomcat /data/webapps
# [root@tomcat ~]# echo web1.longxuan.vip > /data/webapps/ROOT/index.html

测试
刚才在虚拟主机中主机名定义node1.longxuan.vip,所以需要主机在本机手动配置一个域名解析。
如果是windows,修改在C:\Windows\System32\drivers\etc下的hosts文件,需要管理员权限。
使用http://web1.longxuan.vip:8080/访问查看

案例:tomcat实现多虚拟主机

[root@centos8 tomcat]# pwd
/usr/local/tomcat
[root@centos8 tomcat]# vim conf/server.xml
[root@centos8 tomcat]# tail conf/server.xml
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
#添加了以下四行
    <Host name="node1.longxuan.vip" appBase="/data/webapps1">
    </Host>
    <Host name="node2.longxuan.vip" appBase="/data/webapps2">
    </Host>
</Engine>
</Service>
</Server>

#对每个虚拟主机,准备数据
[root@centos8 ~]# mkdir /data/webapps{1,2}/ROOT -pv
mkdir: created directory '/data/webapps1/ROOT'
mkdir: created directory '/data/webapps2/ROOT'
[root@centos8 ~]# cat /data/webapps1/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@centos8 ~]# cat /data/webapps2/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
<%=request.getRequestURL()%>
</body>
</html>


#设置权限
[root@centos8 ~]# chown -R tomcat.tomcat /data/webapps{1,2}/

测试

[root@centos8 ~]# curl http://node1.longxuan.vip:8080/
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
http://node1.longxuan.vip:8080/

</body>
</html>
[root@centos8 ~]# curl http://node2.longxuan.vip:8080/
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
http://node2.mlongxuan.vip:8080/
</body>
</html>

案例:修改tomcat实现多虚拟主机的端口为80

[root@centos8 ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
#注意: 因为以tomcat用户运行,不能直接使用1024以下的端口,需要修改tomcat的运行身份,否则会出现下面错误
[root@centos8 ~]# tail -f /usr/local/tomcat/logs/catalina.out
Caused by: java.net.SocketException: Permission denied

[root@centos8 ~]# vim /lib/systemd/system/tomcat.service
[Service]
.....
#User=tomcat
#Group=tomcat
[root@centos8 ~]# systemctl daemon-reload
[root@centos8 ~]# systemctl restart tomcat

基于web方式的Host Manager虚拟主机管理

可以通过tomcat的管理页面点下面Host Manager按钮进入管理虚拟主机的页面,默认Host Manager 管理页被禁用

允许本机访问配置如下

[root@centos8 tomcat]# vim 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"/> #3.4.4.6添加的内容
    <role rolename="admin-gui" /> #添加新的role
    <user username="admin" password="123456" roles="manager-gui,admin-gui"/> #再加新role
</tomcat-users>

[root@centos8 tomcat]# systemctl restart tomcat

重启Tomcat后,点击"Host Manager"按钮

允许远程主机访问

但通过远程访问地址仍无法访问Host Manager管理页面
默认无法通过网络远程访问Host Manager管理页面

[root@centos8 tomcat]# vim webapps/host-manager/META-INF/context.xml
<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\.31\.0\.\d+" />
    <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apach
e\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.
(?:Linked)?HashMap"/>
</Context>

无需重启服务,直接访问,输入前面的用户和密码,即可登录成功

创建新的虚拟主机

可以管理虚拟主机

#创建虚拟主机前,必须先创建相关目录,否则创建虚拟机不成功
[root@centos8 ~]# mkdir /data/node1/ROOT/
[root@centos8 ~]# echo node1.longxuan.vip > /data/node1/ROOT/index.html
[root@centos8 ~]# chown -R tomcat.tomcat /data/node1/

Context 配置

Centext 配置方式

Context作用:

路径映射:将url映射至指定路径,而非使用appBase下的物理目录,实现虚拟目录功能
应用独立配置,例如单独配置应用日志、单独配置应用访问控制

#映射指定路径
<Context path="/test" docBase="/data/test" reloadable="true" />
#映射站点的根目录
<Context path="/" docBase="/data/website" reloadable="true" />
#还可以添加日志等独立的配置
<Context path="/test" docBase="/data/test" reloadable="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_test_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Context>

说明:

path:指的是访问的URL路径,如果path与appBase下面的子目录同名,context的docBase路径
优先更高
docBase:可以是磁盘文件的绝对路径,也可以是相对路径(相对于Host的appBase)
reloadable:true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB
应用重新加载。生产环境中,建议使用false来禁用。

Centext实现过程

将~/projects/myapp/下面的项目文件复制到/data/下,可以修改一下index.jsp 区别一下

[root@centos8 ~]# cp -r ~/projects/myapp /data/myapp-v1
[root@centos8 ~]# vim /data/myappv1/index.jsp
[root@centos8 ~]# cd /data
[root@centos8 ~]# ln -sv myapp-v1 test

注意:这里特别使用了软链接,原因方便后期版升级或回滚,如是是版本升级,需要将软链接指向
myappv2,重新启动。如果新版上线后,出现问题,重新修改软链接到上一个版本的目录,并重启,就可以实现回滚

修改conf/server.xml设置context
Tomcat的配置文件server.xml中修改如下,重启Tomcat生效

<Host name="node1.ongxuan.vip" appBase="/data/webapps"
        unpackWARs="true" autoDeploy="true" >
    <Context path="/test" docBase="/data/test" reloadable="true" />
</Host>

测试
使用http://node1.longxuan.vip:8080/test/

Valve组件

valve(阀门)组件可以定义日志

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="localhost_access_log" suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />

valve存在多种类型:

定义访问日志:org.apache.catalina.valves.AccessLogValve
定义访问控制:org.apache.catalina.valves.RemoteAddrValve

示例:

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="172\.31\.0\.\d+"/>

案例范例:虚拟主机上利用context实现虚拟目录

#在前面范例的基础上实现,继续创建node1.longxuan.vip虚拟主机下的物理子目录
[root@centos8 ~]# mkdir /data/webapps1/app1/
[root@centos8 ~]# echo /data/webapps1/app1/index.html >
/data/webapps1/app1/index.html

[root@centos8 ~]# curl http://node1.longxuan.vip:8080/app1/
/data/webapps1/app1/index.html

#利用context实现node1.longxuan.vip虚拟主机下的虚拟子目录
[root@centos8 tomcat]# vim conf/server.xml
[root@centos8 tomcat]# tail conf/server.xml
    </Host>
    <Host name="node1.longxuan.vip" appBase="/data/webapps1">
#加下面六行
    <Context path="/app1" docBase="/data/app1" reloadable="true" >
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="node1.longxuan.vip_app1" suffix=".log"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="171\.31\.0\.7"/>
    </Context>
    </Host>
    <Host name="node2.longxuan.vip" appBase="/data/webapps2">
    </Host>
   </Engine>
 </Service>
</Server>

[root@centos8 tomcat]# systemctl restart tomcat
#因数据没有准备好,出现下面错误
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
curl: (7) Failed to connect to node1.longxuan.vip port 8080: Connection refused
#准备数据目录
[root@centos8 tomcat]# mkdir /data/app1-v1
[root@centos8 tomcat]# echo /data/app1-v1/index.html > /data/app1-v1/index.html
[root@centos8 tomcat]# ln -s /data/app1-v1/ /data/app1
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
curl: (7) Failed to connect to node1.longxuan.vip port 8080: Connection refused

#数据目录准备好,还需要重新启动服务,才能访问
[root@centos8 tomcat]# systemctl restart tomcat
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
/data/app1-v1/index.html
[root@centos7 ~]# curl -I http://node1.longxuan.vip:8080/app1/
HTTP/1.1 403
Content-Type: text/html;charset=utf-8
Content-Language: en
Transfer-Encoding: chunked
Date: Tue, 14 Jul 2021 06:48:54 GMT

#可以看到此目录单独的访问日志
[root@centos8 ~]# cat /usr/local/tomcat/logs/node1.magedu.org_app1.2021-06-14.log
172.31.0.8 - - [14/Jul/2021:14:36:01 +0800] "GET /app1/ HTTP/1.1" 200 330
172.31.0.7 - - [14/Jul/2021:14:48:07 +0800] "GET /app1/ HTTP/1.1" 403 618

范例: 基于前面环境,实现软件升级和回滚功能

#升级版本
[root@centos8 tomcat]# mkdir /data/app1-v2
[root@centos8 tomcat]# echo /data/app1-v2/index.html > /data/app1-v2/index.html
[root@centos8 tomcat]# rm -f /data/app1

#删除软链接,仍然可以访问旧版本
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
/data/app1-v1/index.html

#重新服务后,出现错误
[root@centos8 tomcat]# systemctl restart tomcat
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
curl: (7) Failed to connect to node1.longxuan.vip port 8080: Connection refused

#新建软链接,指向新版,仍需重启服务才生效
[root@centos8 tomcat]# ln -s /data/app1-v2/ /data/app1
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
curl: (7) Failed to connect to node1.longxuan.vip port 8080: Connection refused
[root@centos8 tomcat]# systemctl restart tomcat
[root@centos8 tomcat]# curl http://node1.mlongxuan.vip:8080/app1/
/data/app1-v2/index.html

#软件降级或回滚
[root@centos8 tomcat]# rm -f /data/app1
[root@centos8 tomcat]# ln -s /data/app1-v1/ /data/app1
[root@centos8 tomcat]# systemctl restart tomcat
[root@centos8 tomcat]# curl http://node1.longxuan.vip:8080/app1/
/data/app1-v1/index.html
posted @ 2021-08-20 21:01  空白的旋律  阅读(396)  评论(0编辑  收藏  举报