Tomcat 服务详解

1,648 阅读1分钟

一、 安装Tomcat

注意:安装 tomcat 前必须先部署JDK

1. 安装JDK

  • 方法1:Oracle JDK 的二进制文件安装
[root@node5 ~]#  mkdir /data
[root@node5 ~]#  cd /data/
[root@node5 data]#  rz

[root@node5 data]#  ls
jdk-8u291-linux-x64.tar.gz
[root@node5 data]#  tar xf jdk-8u291-linux-x64.tar.gz 
[root@node5 data]#  ln -s /data/jdk1.8.0_291  /usr/local/jdk
[root@node5 data]#  cd /usr/local/jdk/
[root@node5 jdk]#  ls
bin  COPYRIGHT  include  javafx-src.zip  jmc.txt  jre  legal  lib  LICENSE  man  README.html  release  src.zip  THIRDPARTYLICENSEREADME-JAVAFX.txt  THIRDPARTYLICENSEREADME.txt

[root@node5 jdk]#  vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@node5 jdk]#  exit
[root@node5 ~]#  java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
  • 方法2:Oracle JDK 的rpm安装
[root@node5 ~]#  cd /data
[root@node5 data]#  rz

[root@node5 data]#  ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm
[root@node5 data]#  rpm -ivh jdk-8u201-linux-x64.rpm

[root@node5 data]#  vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@node5 data]#  . /etc/profile

[root@node5 data]#  java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

2. 安装Tomcat

[root@node5 data]#  ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm
[root@node5 data]#  tar xf apache-tomcat-9.0.16.tar.gz 
[root@node5 data]#  ls
apache-tomcat-9.0.16  apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm

[root@node5 data]#  ln -s /data/apache-tomcat-9.0.16 /usr/local/tomcat
[root@node5 data]#  cd /usr/local/tomcat/
[root@node5 tomcat]#  ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  work

[root@node5 tomcat]#  cd bin
[root@node5 bin]#  ls
bootstrap.jar  catalina-tasks.xml  commons-daemon.jar            configtest.sh  digest.sh     setclasspath.bat  shutdown.sh  tomcat-juli.jar       tool-wrapper.sh
catalina.bat   ciphers.bat         commons-daemon-native.tar.gz  daemon.sh      makebase.bat  setclasspath.sh   startup.bat  tomcat-native.tar.gz  version.bat
catalina.sh    ciphers.sh          configtest.bat                digest.bat     makebase.sh   shutdown.bat      startup.sh   tool-wrapper.bat      version.sh


`方法1:执行自带脚本,不推荐!`
[root@node5 bin]#  ./catalina.sh  start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@node5 bin]#  ss -natp |grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=15931,fd=54))




`方法2:`
[root@node5 bin]#  useradd -s /sbin/nologin tomcat    //新建用户
[root@node5 bin]#  cd /usr/local/
[root@node5 local]#  chown tomcat:tomcat tomcat/ -R   //修改属主和属组

[root@node5 bin]#  cat > /usr/lib/systemd/system/tomcat.service <<EOF
> [Unit]
> Description=Tomcat
> After=syslog.target network.target
> 
> [Service]
> Type=forking
> ExecStart=/usr/local/tomcat/bin/startup.sh
> ExecStop=/usr/local/tomcat/bin/shutdown.sh
> RestartSec=3
> PrivateTmp=true
> User=tomcat
> Group=tomcat
> 
> [Install]
> WantedBy=multi-user.target
> 
> EOF
[root@node5 local]#  systemctl daemon-reload
[root@node5 local]#  systemctl start tomcat
[root@node5 local]#  ss -natp |grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=16475,fd=54))

安装tomcat.png

二、 配置文件及核心组件

1. 配置文件

1.1 安装目录下文件

tomcat目录.png

目录名字功能
bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件
conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
logs存放 Tomcat 日志 catalina.out
temp存放 Tomcat 运行时产生的文件
webapps存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)
  • bin bin.png

  • conf conf.png

  • lib lib.png

  • logs logs.png

  • temp

    temp.png
  • webapps

    webapps.png
  • work

    work.png

1.2 conf 子目录文件

文件名说明
server.xml主配置文件 全局生效
web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等

注意:配置文件对于大小写敏感

2. 组件

2.1 组件分层和分类

  • 顶级组件
    • Server,代表整个Tomcat容器,一台主机可以启动多tomcat 实例 ,需要确保端口不要产生冲突
  • 服务类组件
    • Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
  • 连接器组件
    • Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
  • 容器类
    • Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
  • 内嵌类
    • 可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。
  • 集群类组件
    • listener、cluster
核心组件.png

2.2 核心组件

名称说明
server服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个
service服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine
connector连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context应用的上下文,配置特定url路径映射和目录的映射关系: url => directory

范例:多个组件关系 conf/server.xml

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">    //此处建议将8005端口号修改为-1或0
   <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">
           <Context >
                <Context />
 </Host>
    </Engine>
  </Service>
</Server>

3. 磁盘文件和访问的url对应关系

                           等于访问
102.168.204.50:8080  ----------------> /usr/local/tomcat/webapps/ROOT/index.jsp
102.168.204.50:8080/blog  -----------> /usr/local/tomcat/webapps/blog/index.jsp

ROOT 和 blog 是同级项目文件
ROOT 是默认的项目,可以省略不写,其他的项目不可以省略

webapps 才是主站点
如果是访问的是ROOT下的文件,url可以省略ROOT,否则不行

4. 主页文件的优先级

  • index.html
  • index.htm
  • index.jsp
[root@localhost conf]# vim /usr/local/tomcat/conf/web.xml
//此文件末尾定义了优先级,可以在站点的目录下配置
<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
项目特殊要求可以写在子配置文件中    
[root@localhost blog]#chown -R tomcat:tomcat  WEB-INF/   //修改权限

三、 实现java项目

  • .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">

1. 手动部署 jar 包

[root@node5 conf]#  cd /opt
[root@node5 opt]#  mkdir app1
[root@node5 opt]#  cd app1/
[root@node5 app1]#  vim test.html
test test test
[root@node5 app1]#  vim 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 ("test jsp");
%>
%%<br>
%<%=request.getRequestURL()%>
%</body>
%</html>
[root@node5 app1]#  jar cvf /opt/app1.war *   //打包
已添加清单
正在添加: test.html(输入 = 15) (输出 = 10)(压缩了 33%)
正在添加: test.jsp(输入 = 346) (输出 = 298)(压缩了 13%)
[root@node5 app1]#  cd /opt/
[root@node5 opt]#  ls
app1  app1.war  rh

[root@node5 opt]#  cp app1.war /usr/local/tomcat/webapps/
[root@node5 opt]#  cd /usr/local/tomcat/webapps/
[root@node5 webapps]#  ls
app1  app1.war  docs  examples  host-manager  manager  ROOT   
//这里可以看到,app1.war自动解压为app1

[root@node5 webapps]#  tree app1
app1
├── META-INF
│   ├── MANIFEST.MF
│   └── war-tracker
├── test.html
└── test.jsp

1 directory, 4 files

浏览器访问192.168.204.50:8080/app1/test.html进行验证
手动部署jar.png 手动部署jar2.png
`注意:更新时记得清除缓存`

[root@node5 opt]#  cd /usr/local/tomcat/work/
[root@node5 work]#  ls
Catalina
[root@node5 work]#  tree Catalina/     
Catalina/
└── localhost
    ├── app1
    │?? └── org
    │??     └── apache
    │??         └── jsp
    │??             ├── test_jsp.class   //缓存
    │??             └── test_jsp.java    //缓存
    ├── docs
    ├── examples
    ├── host-manager
    ├── manager
    └── ROOT
        └── org
            └── apache
                └── jsp
                    ├── index_jsp.class
                    └── index_jsp.java

13 directories, 4 files

2. 自建博客

[root@node5 tomcat]#  cd webapps/
[root@node5 webapps]#  rz    //上传安装包

[root@node5 webapps]#  ls
docs  examples  host-manager  jpress-v3.2.1.war  manager  ROOT
[root@node5 webapps]#  ln -s jpress-v3.2.1 jpress

[root@node5 webapps]#  cat >/etc/yum.repos.d/mysql.repo <<EOF
> [mysql57-community]
> name=MySQL 5.7 Community Server
> baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
> enabled=1
> gpgcheck=0
> EOF
[root@node5 webapps]#  yum -y install mysql-community-server
[root@node5 webapps]#  systemctl start mysqld

[root@node5 webapps]#  grep password /var/log/mysqld.log
2024-06-13T10:52:47.152752Z 1 [Note] A temporary password is generated for root@localhost: hkH5l!mq%iyR
[root@node5 webapps]#  mysql -u root -p'hkH5l!mq%iyR'
mysql> set global validate_password_policy=0;   //修改密码策略
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=1;   //修改密码策略
Query OK, 0 rows affected (0.00 sec)

mysql> alter user root@'localhost' identified by 'abc@123';
Query OK, 0 rows affected (0.00 sec)

CREATE DATABASE blog;
GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

自建博客.png

四、 状态页

  • server status 状态页
  • manger app 管理项目 (不建议开启)
  • host manger 配置虚拟主机的设置 (不建议开启)

状态页.png

状态页403.png

1. 启用状态页 (只能本地访问)

默认的管理页面被禁用,修改用户认证的配置文件conf/tomcat-users.xml,将状态页启用。

[root@node5 tomcat]#  cd conf/
[root@node5 conf]#  ls
Catalina         catalina.properties  jaspic-providers.xml  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          jaspic-providers.xsd  server.xml          tomcat-users.xsd

[root@node5 conf]#  vim tomcat-users.xml 
  <role rolename="manager-gui"/>                             //角色
  <user username="cxk" password="cxk" roles="manager-gui"/>  //指定用户和密码
[root@node5 conf]#  systemctl restart tomcat.service 

注意:此时只能通过本地访问,不能进行远程访问

zye1.png

zty2.png

zty3.png

2. 开启允许远程状态页

[root@node5 tomcat]#  cd /usr/local/tomcat/webapps/manager/
[root@node5 manager]#  ls
images  index.jsp  META-INF  status.xsd  WEB-INF  xform.xsl
[root@node5 manager]#  cd META-INF/
[root@node5 META-INF]#  ls
context.xml

[root@node5 META-INF]#  vim context.xml 
  allow="192\.\d+\.\d+\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加允许的主机地址
[root@node5 META-INF]#  systemctl restart tomcat.service 

ip+.png

zyt4.png

3. host manger

[root@node5 tomcat]#  cd conf/
[root@node5 conf]#  vim tomcat-users.xml 
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="cxk" password="cxk" roles="manager-gui,admin-gui"/>

[root@node5 tomcat]#  cd webapps/host-manager/
[root@node5 host-manager]#  ls
images  index.jsp  manager.xml  META-INF  WEB-INF
[root@node5 host-manager]#  vim META-INF/context.xml 
  allow="192\.\d+\.\d+\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@node5 host-manager]#  systemctl restart tomcat

zty6.png

五、 端口号

  • 8005:Tomcat 管理端口,比如关闭Tomcat。很危险,建议改成 -1 无效 、或改为 0
  • 8009:AJP协议专用接口
  • 8080:http协议请求的接口

端口8005/tcp安全配置管理

8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个字符串,tomcat接收到后就会关闭此Server。

此管理功能建议禁用,可将SHUTDOWN改为一串猜不出的字符串实现或者port修改成 0,会使用随机端口如:36913

port设为-1等无效端口,将关闭此功能此行不能被注释,否则无法启动tomcat服务

示例:
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">

六、 虚拟主机配置

  • 创建虚拟主机前,必须先创建相关目录
[root@node5 host-manager]#  cd /data
[root@node5 data]#  mkdir web{1,2,3}/ROOT  -pv  
mkdir: 已创建目录 "web1"
mkdir: 已创建目录 "web1/ROOT"
mkdir: 已创建目录 "web2"
mkdir: 已创建目录 "web2/ROOT"
mkdir: 已创建目录 "web3"
mkdir: 已创建目录 "web3/ROOT"
[root@node5 data]#  echo  "web1 web1" > /data/web1/ROOT/index.jsp
[root@node5 data]#  echo  "web2 web2" > /data/web2/ROOT/index.jsp
[root@node5 data]#  echo  "web3 web3" > /data/web3/ROOT/index.jsp
[root@node5 data]#  chown -R tomcat.tomcat /data/    //修改权限
  • 修改配置文件
[root@node5 data]#  vim /usr/local/tomcat/conf/server.xml

165       <Host name="www.a.com"  appBase="/data/web1"
166             unpackWARs="true" autoDeploy="true">
167       </Host>
168       <Host name="www.b.com"  appBase="/data/web2"
169             unpackWARs="true" autoDeploy="true">
170       </Host>
171       <Host name="www.c.com"  appBase="/data/web3"
172             unpackWARs="true" autoDeploy="true">
173       </Host>
//Host name="www.a.com" 定义一个名为www.a.com的主机
//appBase="/data/web1"  指定其应用程序的基本路径为/data/web1
//unpackWARs="true" 表示部署WAR文件时会进行解压
//autoDeploy="true" 表示自动部署。这意味着当你放置WAR文件到指定目录时,Tomcat会自动部署这些应用程序。

[root@node5 data]#  systemctl restart tomcat
xnzj.png xnzjyz.png

七、 Context配置

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来禁用。
[root@node5 conf]#  cd /usr/local/tomcat/conf/
[root@node5 conf]#  vim server.xml 
      <Host name="www.a.com"  appBase="/data/web1"
            unpackWARs="true" autoDeploy="true">
      <Context path="/test" docBase="/data/test" reloadable="false" />
      // 如果访问 www.a.com/test/ 那么就替换成 /data/test
      </Host>

[root@node5 conf]#  cd /data
[root@node5 data]#  mkdir test
[root@node5 data]#  cd test/
[root@node5 test]#  echo "this is test haha" > index.jsp
[root@node5 test]#  chown -R tomcat.tomcat /data/     //修改权限

[root@node5 test]#  systemctl restart tomcat


[root@localhost ~]#  curl www.a.com:8080/test/  //验证
this is test haha       //置换为/data/test/内容

八、 Tomcat Nginx 动静分离

1. 反向代理单机

Tomcat1.png.

  • 代理服务器:192.168.204.20
  • Tomcat服务器:192.168.204.50
  • 客户端:192.168.204.60

代理服务器:

[root@node2 ~]#  vim /etc/hosts
192.168.204.50  www.a.com www.b.com www.c.com
//填写Tomcat服务器地址

[root@node2 ~]#  systemctl stop firewalld
[root@node2 ~]#  setenforce 0
[root@node2 ~]#  yum install epel-release.noarch -y
[root@node2 ~]#  yum insta1l nginx -y
[root@node2 ~]#  systemctl start nginx

[root@node2 ~]#  vim /etc/nginx/nginx.conf
 46         location / {
 47         proxy_pass http://www.a.com:8080;
 48         }
[root@node2 ~]#  nginx -t
[root@node2 ~]#  nginx -s reload

Tomcat服务器:

[root@node5 data]#  cd /usr/local/tomcat/webapps/ROOT/
[root@node5 ROOT]#  mv index.jsp index.jsp.bak
[root@node5 ROOT]#  vim index.jsp
 7-5 7-5
 
[root@node5 ROOT]#  vim /usr/local/tomcat/conf/server.xml   //创建虚拟主机

      <Host name="www.a.com"  appBase="/data/web1"
            unpackWARs="true" autoDeploy="true">
      <Context path="/test" docBase="/data/test" reloadable="false" />
      </Host>
      <Host name="www.b.com"  appBase="/data/web2"
            unpackWARs="true" autoDeploy="true">
      </Host>
      <Host name="www.c.com"  appBase="/data/web3"
            unpackWARs="true" autoDeploy="true">
      </Host>

[root@node5 ROOT]#  cd /data
[root@node5 data]#  mkdir web{1,2,3}/ROOT  -p
[root@node5 data]#  echo  "a.com" > /data/web1/ROOT/index.jsp
[root@node5 data]#  echo  "b.com" > /data/web2/ROOT/index.jsp
[root@node5 data]#  echo  "c.com" > /data/web3/ROOT/index.jsp 
[root@node5 data]#  chown -R tomcat.tomcat /data/    //修改权限
[root@node5 data]#  systemctl restart tomcat

客户端:

[root@node6 ~]#  vim /etc/hosts
192.168.204.20 www.a.com www.b.com www.c.com
//填写代理服务器地址


[root@node6 ~]#  curl www.a.com
a.com
[root@node6 ~]#  curl www.b.com
a.com
[root@node6 ~]#  curl www.c.com
a.com

2. 反向代理多机

2.1 负载均衡

Tomcat单机反向代理.png
  • 代理服务器:192.168.204.20
  • Tomcat服务器1:192.168.204.40
  • Tomcat服务器2:192.168.204.50
  • 客户端:192.168.204.60

Tomcat服务器1:

安装Tomcat
[root@node4 local]#  cd /usr/local/tomcat/webapps/ROOT/
[root@node4 ROOT]#  mv index.jsp index.jsp.bak
[root@node4 ROOT]#  vim index.jsp
  7-4  7-4

Tomcat服务器2:

安装Tomcat
[root@node5 local]#  cd /usr/local/tomcat/webapps/ROOT/
[root@node5 ROOT]#  mv index.jsp index.jsp.bak
[root@node5 ROOT]#  vim index.jsp
  7-5  7-5

代理服务器:

[root@node2 ~]#  vim /etc/nginx/nginx.conf

    upstream tomcat {
    server 192.168.204.40:8080;
    server 192.168.204.50:8080;
    }

     location / {
     proxy_pass http://tomcat;
     }

[root@node2 ~]#  nginx -s reload

客户端:

[root@node6 ~]#  curl 192.168.204.20
7-4 7-4
[root@node6 ~]#  curl 192.168.204.20
7-4 7-4
[root@node6 ~]#  curl 192.168.204.20
7-5 7-5
[root@node6 ~]#  curl 192.168.204.20
7-4 7-4
[root@node6 ~]#  curl 192.168.204.20
7-5 7-5

2.2 动静分离

代理服务器:

[root@node2 ~]#  vim /etc/nginx/nginx.conf
        location ~ \.jsp$ {
        proxy_pass http://tomcat;
        }
        location ~ \.(jpg|html|png)$ {
        root /usr/share/nginx/html;
        }
[root@node2 ~]#  nginx -s reload

[root@node2 ~]#  cd /usr/share/nginx/html/
[root@node2 html]#  echo static > index.html

客户端:

[root@node6 ~]#  curl 192.168.204.20/index.html  //访问静态资源
static
[root@node6 ~]#  curl 192.168.204.20/index.jsp   //访问动态资源
7-4 7-4
[root@node6 ~]#  curl 192.168.204.20/index.jsp
7-5 7-5

3. 反向代理多机多级

多机多级.png
  • 代理服务器:192.168.204.10
  • nginx服务器1:192.168.204.20
  • nginx服务器2:192.168.204.30
  • Tomcat服务器1:192.168.204.40
  • Tomcat服务器2:192.168.204.50
  • 客户端:192.168.204.60

代理服务器:

[root@node1 ~]#  yum install epel-release.noarch -y
[root@node1 ~]#  yum install nginx -y
[root@node1 ~]#  systemctl start nginx

[root@node1 ~]#  vim /etc/nginx/nginx.conf
//http语句块中
 30     upstream web {
 31     server 192.168.204.20;
 32     server 192.168.204.30;
 33     }

//server语句块中
 48         location / {
 49         proxy_pass http://web;
 50         }
[root@node1 ~]#  nginx -s reload

nginx服务器1:

[root@node2 ~]#  yum install epel-release.noarch -y
[root@node2 ~]#  yum install nginx -y
[root@node2 ~]#  systemctl start nginx

[root@node2 html]#  vim /etc/nginx/nginx.conf
        location ~ \.jsp$ {
        proxy_pass http://192.168.204.40:8080;
        }
        location ~ \.(jpg|html|png)$ {
        root /usr/share/nginx/html;
        }
[root@node2 html]#  nginx -s reload
[root@node2 html]#  cd /usr/share/nginx/html/
[root@node2 html]#  echo 7-2 > index.html

nginx服务器2:

[root@node3 ~]#  yum install epel-release.noarch -y
[root@node3 ~]#  yum install nginx -y
[root@node3 ~]#  systemctl start nginx

[root@node3 ~]#  vim /etc/nginx/nginx.conf
        location ~ \.jsp$ {
        proxy_pass http://192.168.204.50:8080;
        }
        location ~ \.(jpg|html|png)$ {
        root /usr/share/nginx/html;
        }
[root@node3 html]#  nginx -s reload
[root@node3 html]#  cd /usr/share/nginx/html/
[root@node3 html]#  echo 7-3 > index.html

Tomcat服务器1:

安装Tomcat
[root@node4 ~]#  cd /usr/local/tomcat/webapps/ROOT/
[root@node4 ROOT]#  mv index.jsp index.jsp.bak
[root@node4 ROOT]#  echo "7-4 7-4" > index.jsp

Tomcat服务器2:

安装Tomcat
[root@node5 ~]#  cd /usr/local/tomcat/webapps/ROOT/
[root@node5 ROOT]#  mv index.jsp index.jsp.bak
[root@node5 ROOT]#  echo "7-5 7-5" > index.jsp

客户端验证:

验证多机多级.png