zoukankan      html  css  js  c++  java
  • 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:WindowsSystem32driversetc下的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
    
  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/15168153.html
Copyright © 2011-2022 走看看